Discutimos algumas das opções de comando SED no comando Sed em Linux/Unix com exemplos
SED é usado para encontrar, filtrar, substituir texto, substituir e manipulações de texto como inserção, pesquisa de eliminação, etc. É um dos poderosos utilitários oferecidos pelos sistemas Linux/Unix. Podemos usar sed com expressões regulares. Espero que pelo menos tenha os conhecimentos básicos sobre expressões regulares do Linux.
Fornece edição não-interactiva de ficheiros de texto, razão pela qual é utilizado para automatizar a edição e tem dois buffers – buffer de padrão e buffer de retenção. Sed usa buffer Patter quando lê ficheiros, linha a linha e que actualmente a linha lida é inserida no buffer de padrão enquanto que o buffer hold é um armazenamento a longo prazo, captura a informação, armazena-a e reutiliza-a quando é necessária. Inicialmente, ambos estão vazios. O comando SED é utilizado para executar operações diferentes sem sequer abrir o ficheiro.
sed sintaxe geral –
sed OPÇÕES…
Criar primeiro um ficheiro.txt no qual vou executar operações para comandos SED. Neste blogue, utilizei o ficheiro “a.txt” para explicar todos os exemplos. O blog vai tornar-se demasiado longo se eu escrever a saída de cada comando SED. Assim, pode consultar o mesmo ficheiro para praticar todos os comandos inicialmente.
# cat a.txtlife isn't meant to be easy, life is meant to be lived.Try to learn & understand something new everyday in life.Respect everyone & most important love everyone.Don’t hesitate to ask for love & don’t hesitate to show love too.Life is too short to be shy.In life experience will help you differentiating right from wrong.
# Vamos começar com Espaçamento de Ficheiros
1 – Insira uma linha em branco após cada linha –
# sed G a.txt
2 – Para inserir duas linhas em branco –
# sed 'G;G' a.txt
3 – Apagar linhas em branco e inserir uma linha em branco após cada linha –
# sed '/^$/d;G' a.txt
4 – Inserir uma linha preta acima de cada linha que corresponda a “amor” –
# sed '/love/{x;p;x;}' a.txt
5 – Inserir uma linha em branco abaixo de cada linha que corresponda a “amor” –
# sed '/love/G' a.txt
6 – Inserir 5 espaços à esquerda de cada linha –
# sed 's/^/ /' a.txt
# Numeração de linhas
1 – Numerar cada linha de um ficheiro (alinhamento à esquerda). **=*** é utilizado para numerar a linha. \t é usado para numerar entre número e frase –
# sed = a.txt | sed 'N;s/\n/\t/'
2 – Numerar cada linha de um ficheiro (número à esquerda, alinhado à direita). Este comando é semelhante a `cat -n filename`.
# sed = a.txt | sed 'N; s/^/ /; s/ *\(.\{4,\}\)\n/\1 /'
3 – Numerar cada linha de um ficheiro, apenas se a linha não estiver em branco –
# sed '/./=' a.txt | sed '/./N; s/\n/ /'
# Apagar linhas
1 – Apagar uma linha em particular –
Sintax: sed ‘nd’ filename
Exemplo :
# sed '5d' a.txt
2 – Apagar a última linha
Syntax: sed ‘$d’ filename
3 – Apagar linha da gama x a y
Syntax: sed ‘x,yd’ filename
Exemplo :
# sed '3,5d' a.txt
4 – Apagar da nª à última linha
Syntax: sed ‘nth,$d’ filename
Exemplo :
# sed '2,$d' a.txt
5 – Apagar a linha de correspondência do padrão –
Syntax: sed ‘/pattern/d’ filename
Exemplo :
# sed '/life/d' a.txt
6 – Apagar linhas a partir da nona linha e cada segunda linha a partir daí –
Sintaxe: sed ‘n~2d’ filename
Exemplo :
# sed '3~2d' a.txt
7 – Apagar as linhas que correspondem ao padrão e 2 linhas depois disso –
Sintaxe: sed ‘/pattern/,+2d’ filename
Exemplo :
# sed '/easy/,+2d' a.txt
8 – Apagar linhas em branco
# sed '/^$/d' a.txt
9 – Apagar linhas vazias ou aquelas que começam com “#” –
# sed -i '/^#/d;/^$/d' a.txt
# Visualizar/imprimir os ficheiros
Se quisermos visualizar o conteúdo do ficheiro, então usamos o comando cat e se quisermos ver o conteúdo inferior e superior de qualquer ficheiro, usamos ferramentas como a cabeça e a cauda. Mas e se precisarmos de ver uma secção em particular no meio de qualquer ficheiro? Aqui discutiremos, como usar o comando SED para ver uma secção de qualquer ficheiro.
1 – Visualizar um ficheiro de x a y intervalo –
Syntax: sed -n ‘x,yp’ nome de ficheiro
Exemplo :
# sed -n '2,5p' a.txt
2 – Visualizar todo o ficheiro excepto o intervalo dado –
Syntax: sed ‘x,yd’ nome de ficheiro
Exemplo :
# sed '2,4d' a.txt
3 – Imprimir n-ésima linha do ficheiro –
Sintaxe: sed -n ‘endereço’p nome do ficheiro
Exemplo :
# sed -n '4'p a.txt
4 – Imprimir linhas da x-ésima linha à y-ésima linha.
Syntax: sed -n ‘x,y’p filename
Exemplo :
# sed -n '4,6'p a.txt
5 – Imprimir apenas a última linha –
Syntax: sed -n ‘
# sed -n '3,$'p a.txt
Impressão do padrão
7 – Imprimir apenas a linha que corresponde ao padrão –
Sintaxe: sed -n /padrão/p nome do ficheiro
Exemplo :
# sed -n /every/p a.txt
8 – Imprimir linhas que correspondem ao padrão i.e da entrada à xª linha.
Syntax: sed -n ‘/pattern/,xp’ filename
Exemplo :
# sed -n '/everyone/,5p' a.txt
Seguir as linhas que correspondem ao padrão, a 3ª linha corresponde ao padrão “todos”, por isso imprime da 3ª linha à 5ª linha. Use $ no lugar de 5, se quiser imprimir o ficheiro até ao fim.
9 – Imprime linhas desde a x-ésima linha da entrada, até à linha que corresponde ao padrão. Se o padrão não for encontrado, então imprime até ao fim do ficheiro.
Syntax: sed -n ‘x,/pattern/p’ filename
Exemplo :
sed -n '1,/everyone/p' a.txt
10 – Imprime as linhas que correspondem ao padrão até à xésima linha seguinte –
Syntax: sed -n ‘/pattern/,+xp’ filename
Exemplo :
sed -n '/learn/,+2p' a.txt
# Substituição pelo comando sed
1 – Alterar a primeira ocorrência do padrão –
# sed 's/life/leaves/' a.txt
2 – Substituir a n-ésima ocorrência de um padrão numa linha –
Syntax: sed ‘s/old_pattern/novo_pattern/n’ filename
Exemplo :
# sed 's/to/two/2' a.txt
Escrevemos “2” porque substituímos a segunda ocorrência. Da mesma forma pode usar 3, 4 etc. de acordo com a necessidade.
3 – Substituir toda a ocorrência do padrão numa linha.
# sed 's/life/learn/g' a.txt
4 – Substituir o padrão da n-ésima ocorrência por todas as ocorrências numa linha.
Syntax: sed ‘s/old_pattern/novo_pattern/ng’ filename
Exemplo :
# sed 's/to/TWO/2g' a.txt
Nota – Este comando sed substitui a segunda, terceira, etc. ocorrência de padrão “to” por “TWO” numa linha.
Se desejar imprimir apenas as linhas substituídas, então use a opção “-n” juntamente com a bandeira de impressão “/p” para exibir apenas as linhas substituídas –
# sed -n 's/to/TWO/p' a.txt
E se desejar imprimir duas vezes as linhas substituídas, depois usar apenas a bandeira de impressão “/p” sem a opção “-n”-
# sed 's/to/TWO/p' a.txt
5 – Substituindo o padrão num número de linha específico. Aqui, “m” é o número de linha.
Syntax: sed ‘m s/old_pattern/novo_pattern/’ filename
Exemplo :
# sed '3 s/every/each/' a.txt
Se desejar imprimir apenas as linhas substituídas –
# sed -n '3 s/every/each/p' a.txt
6 – Substituir cadeia de caracteres num intervalo definido de linhas –
Sintaxe: sed ‘x,y s/old_pattern/novo_pattern/’ filename
where,
x = número da linha inicial
and y = número da linha final
Exemplo :
# sed '2,5 s/to/TWO/' a.txt
Nota – $ pode ser usado no lugar de “y” se quisermos alterar o padrão até à última linha do ficheiro.
Exemplo :
# sed '2,$ s/to/TWO/' a.txt
7 – Se desejar substituir o padrão a fim de ignorar o caso dos caracteres (começando com maiúsculas ou minúsculas), então há duas maneiras de substituir tais padrões –
Frist, Usando a bandeira de impressão “/i” –
Syntax: sed ‘s/old_pattern/novo_pattern/i’ filename
Exemplo :
# sed 's/life/Love/i' a.txt
Segundo, Usando expressões regulares –
# sed 's/ife/Love/g' a.txt
8 – Para substituir vários espaços por um único espaço –
# sed 's/ */ /g' filename
9 – Substituir um padrão seguido do outro padrão –
Sintaxe: sed ‘/followed_pattern/ s/old_pattern/novo_pattern/’ filename
Exemplo :
# sed '/is/ s/live/love/' a.txt
10 – Substituir um padrão por outro, excepto na enésima linha.
Syntax: sed ‘n!s/old_pattern/novo_pattern/’ filename
Exemplo :
# sed -i '5!s/life/love/' a.txt
p filename
6 – Imprimir da nª linha até ao fim do ficheiro –
Syntax: sed -n ‘n,$p’ filename
Exemplo :
# sed -n '3,$'p a.txt
Pattern Printing
7 – Print the line only which matches the pattern –
Syntax: sed -n /pattern/p filename
Example :
# sed -n /every/p a.txt
8 – Print lines which matches the pattern i.e from input to xth line.
Syntax: sed -n ‘/pattern/,xp’ filename
Example :
# sed -n '/everyone/,5p' a.txt
Following prints lines which matches the pattern, 3rd line matches the pattern “everyone”, so it prints from 3rd line to 5th line. Use $ in place of 5, if want to print the file till end.
9 – Prints lines from the xth line of the input, up-to the line which matches the pattern. If the pattern doesn’t found then it prints up-to end of the file.
Syntax: sed -n ‘x,/pattern/p’ filename
Example :
sed -n '1,/everyone/p' a.txt
10 – Print the lines which matches the pattern up-to the next xth lines –
Syntax: sed -n ‘/pattern/,+xp’ filename
Example :
sed -n '/learn/,+2p' a.txt
# Replacement with the sed command
1 – Change the first occurrence of the pattern –
# sed 's/life/leaves/' a.txt
2 – Replacing the nth occurrence of a pattern in a line –
Syntax: sed ‘s/old_pattern/new_pattern/n’ filename
Example :
# sed 's/to/two/2' a.txt
We wrote “2” because we replaces the second occurrence. Likewise you can use 3, 4 etc according to need.
3 – Replacing all the occurrence of the pattern in a line.
# sed 's/life/learn/g' a.txt
4 – Replace pattern from nth occurrence to all occurrences in a line.
Syntax: sed ‘s/old_pattern/new_pattern/ng’ filename
Example :
# sed 's/to/TWO/2g' a.txt
Note – This sed command replaces the second, third, etc occurrences of pattern “to” with “TWO” in a line.
If you wish to print only the replaced lines, then use “-n” option along with “/p” print flag to display only the replaced lines –
# sed -n 's/to/TWO/p' a.txt
And if you wish to print the replaced lines twice, then only use “/p” print flag without “-n” option-
# sed 's/to/TWO/p' a.txt
5 – Replacing pattern on a specific line number. Here, “m” is the line number.
Syntax: sed ‘m s/old_pattern/new_pattern/’ filename
Example :
# sed '3 s/every/each/' a.txt
If you wish to print only the replaced lines –
# sed -n '3 s/every/each/p' a.txt
6 – Replace string on a defined range of lines –
Syntax: sed ‘x,y s/old_pattern/new_pattern/’ filename
where,
x = starting line number
and y = ending line number
Example :
# sed '2,5 s/to/TWO/' a.txt
Note – $ can be used in place of “y” if we wish to change the pattern up-to last line in the file.
Example :
# sed '2,$ s/to/TWO/' a.txt
7 – If you wish to replace pattern in order to ignore character case (beginning with uppercase or lowercase), then there are two ways to replace such patterns –
Frist, By using “/i” print flag –
Syntax: sed ‘s/old_pattern/new_pattern/i’ filename
Example :
# sed 's/life/Love/i' a.txt
Second, By using regular expressions –
# sed 's/ife/Love/g' a.txt
8 – To replace multiple spaces with a single space –
# sed 's/ */ /g' filename
9 – Replace one pattern followed by the another pattern –
Syntax: sed ‘/followed_pattern/ s/old_pattern/new_pattern/’ filename
Example :
# sed '/is/ s/live/love/' a.txt
10 – Replace a pattern with other except in the nth line.
Syntax: sed ‘n!s/old_pattern/new_pattern/’ filename
Example :
# sed -i '5!s/life/love/' a.txt
0 comentários