Comando Sed ou Stream Editor é um utilitário muito poderoso oferecido pelos sistemas Linux/Unix. É utilizado principalmente para substituição de texto , encontrar & substituir mas também pode efectuar outras manipulações de texto como inserção, eliminação, pesquisa, etc. Com SED, podemos editar ficheiros completos sem realmente ter de o abrir. Sed também suporta o uso de expressões regulares, o que faz de sed uma ferramenta de manipulação de teste ainda mais poderosa.
Neste artigo, aprenderemos a usar o comando SED com a ajuda de alguns exemplos. A sintaxe básica para usar o comando sed é,
sed OPÇÕES…
p>Agora vamos ver alguns exemplos.
Exemplo :1) Exibindo texto parcial de um ficheiro
Com sed, podemos ver apenas alguma parte de um ficheiro em vez de ver todo o ficheiro. Para ver algumas linhas do ficheiro, usar o seguinte comando,
$ sed -n 22,29p testfile.txt
aqui, a opção ‘n’ suprime a impressão de todo o ficheiro & a opção ‘p’ imprimirá apenas linhas de 22 a 29.
Exemplo :2) Mostrar tudo excepto algumas linhas
Para mostrar todo o conteúdo de um ficheiro excepto alguma parte, use o seguinte comando,
$ sed 22,29d testfile.txt
Opção ‘d’ irá remover as linhas mencionadas da saída.
Exemplo :3) Mostrar cada 3ª linha começando com a Nª linha
Exemplo :4 ) Apagar uma linha usando o comando sed
Para apagar uma linha com sed de um ficheiro, use o seguinte comando,
$ sed Nd testfile.txt
onde ‘N’ é o número de linha & a opção ‘d’ apagará o número de linha mencionado. Para apagar a última linha do ficheiro, utilizar
$ sed $d testfile.txt
Exemplo :5) Apagar um intervalo de linhas
Para apagar um intervalo de linhas do ficheiro, execute
$ sed '29,34d' testfile.txt
Isto apagará as linhas 29 a 34 do ficheiro testfile.txt.
Exemplo :6) Apagar linhas que não as mencionadas
Para apagar linhas que não as mencionadas de um ficheiro, usaremos ‘!’
$ sed '29,34!d' testfile.txt
em nenhum lugar ‘!” a opção é usada como não, pelo que inverterá a condição, ou seja, não apagará as linhas mencionadas. Todas as outras linhas 29-34 serão apagadas dos ficheiros testfile.txt.
Example :7) Adicionando linhas/espaços em branco
Para adicionar uma linha em branco após cada linha não em branco, usaremos a opção ‘G’,
$ sed G testfile.txt
Exemplo :8) Pesquisar e Substituir uma string usando sed
Para pesquisar & substituir uma string do ficheiro, usaremos o seguinte exemplo,
$ sed 's/danger/safety/' testfile.txt
a opção ‘s’ procurará a palavra ‘perigo’ & substitui-la por ‘segurança’ em cada linha apenas para a primeira ocorrência.
Exemplo :9) Pesquisar e substituir uma string de todo o ficheiro usando sed
Para substituir completamente a palavra do ficheiro, usaremos a opção ‘g’ por ‘s’,
$ sed 's/danger/safety/g' testfile.txt
Exemplo :10) Substituir a n-ésima ocorrência de padrão de corda
Podemos também substituir uma corda na n-ésima ocorrência de um ficheiro. Como substituir ‘perigo’ por ‘segurança’ apenas na segunda ocorrência,
$ sed ‘s/danger/safety/2’ testfile.txt
Para substituir ‘perigo’ na segunda ocorrência de cada linha de todo o ficheiro, usar
$ sed 's/danger/safety/2g' testfile.txt
Exemplo :11) Substituir uma corda numa determinada linha
Para substituir uma corda apenas de uma determinada linha, use
$ sed '4 s/danger/safety/' testfile.txt
Isto substituirá apenas a corda da 4ª linha do ficheiro. Podemos também mencionar um intervalo de linhas em vez de uma única linha,
$ sed '4,9 s/danger/safety/' testfile.txt
Exemplo :12) Para adicionar uma linha depois/antes da pesquisa correspondente
Para adicionar uma nova linha com algum conteúdo a depois de cada correspondência de padrão, use a opção ‘a’ ,
$ sed '/danger/a "This is new line with text after match"' testfile.txt
Para adicionar uma nova linha com algum conteúdo a antes de cada correspondência de padrão, use a opção ‘i’,
$ sed '/danger/i "This is new line with text before match" ' testfile.txt
Exemplo :13) Alterar uma linha inteira com padrão combinado
Para alterar uma linha inteira para uma nova linha quando um padrão de pesquisa corresponde, precisamos de usar a opção ‘c’ com sed,
$ sed '/danger/c "This will be the new line" ' testfile.txt
Então quando o padrão corresponde a ‘perigo’, a linha inteira será alterada para a linha mencionada.
Opções avançadas com sed
Upa até agora só usávamos expressões simples com sed, agora vamos discutir alguns usos avançados de sed com regex,
Exemplo :14) Executando múltiplos comandos de sed
Se precisarmos de executar múltiplas expressões de sed, podemos usar a opção ‘e’ para encadear os comandos de sed,
$ sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt
Exemplo :15) Fazer uma cópia de segurança antes de editar um ficheiro
Para criar uma cópia de segurança de um ficheiro antes de o editarmos, usar a opção ‘-i.bak’,
$ sed -i.bak -e 's/danger/safety/g' testfile.txt
Isto irá criar uma cópia de segurança do ficheiro com extensão .bak. Também pode utilizar outra extensão se desejar.
Exemplo :16) Apagar uma linha de ficheiro que comece com & terminando com um padrão
Para apagar uma linha que comece com uma determinada cadeia de caracteres & terminando com outra cadeia de caracteres, use
$ sed -e 's/^danger.*stops$//g' testfile.txt
Isto irá apagar a linha com ‘perigo’ no início & ‘pára’ no fim & pode ter qualquer número de palavras no meio, ‘.*’ define essa parte.
Exemplo :17) Linhas anexas
Para adicionar algum conteúdo antes de cada linha com sed & regex, use
$ sed -e 's/.*/testing sed &/' testfile.txt
Então agora cada linha terá ‘test sed’ antes dele.
Exemplo :18) Remover todas as linhas comentadas & linhas vazias
Para remover todas as linhas comentadas, i.e. linhas com # & todas as linhas vazias, use
$ sed -e 's/#.*//;/^$/d' testfile.txt
Para remover apenas as linhas comentadas, use
$ sed -e 's/#.*//' testfile.txt
Exemplo :19) Obter lista de todos os nomes de utilizador de /etc/passwd
Para obter a lista de todos os nomes de utilizador do ficheiro /etc/passwd, use
$ sed 's/\(*\).*/\1/' /etc/passwd
uma lista completa todos os nomes de utilizador serão gerados no ecrã como saída.
Exemplo :20) Evitar a sobreposição de ligações do sistema com o comando sed
‘sed -i’ comando foi conhecido para remover ligações do sistema & criar apenas ficheiros regulares no lugar do ficheiro de ligação. Assim, para evitar tal situação & evitar que ‘sed -i’ destrua as ligações, usar as opções ‘-follow-symklinks’ com o comando a ser executado.
Vamos assumir que quero desactivar o SELinux no CentOS ou RHEL Severs