Às vezes, precisamos remover uma linha específica de um ou mais arquivos. Por exemplo, tenho uma lista de arquivos e preciso remover a linha 27 de todos eles (a linha 27 é uma ACL, regra ou configuração). Posso editar arquivo por arquivo ou posso simplesmente fazer o que preciso usando o comando `sed` e um script bash (opcional).
Mas, vamos tentar um único arquivo um tanto simples.
Temos o arquivo distros-deb.txt que contém o seguinte:
debian
kubuntu
archlinux
solos
hortelã
Em outras palavras, o arquivo distros-deb.txt é onde listaremos as distribuições baseadas em Debian, mas vemos que a linha 3 contém "archlinux", uma distribuição que claramente não tem nada a ver com Debian, então precisamos remover essa linha. Para remover a linha 3 desse arquivo, adicionaremos o seguinte:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Explicar essa linha é fácil: com `sed "3d"` estamos indicando que vamos deletar a linha #3; com `distros-deb.txt` estamos dizendo em qual arquivo trabalhar, ou seja, deletar a linha #3 deste arquivo. Até este ponto, se pressionarmos `<kbd>Enter</kbd>`, ele nos mostrará o que queremos, mas no terminal; portanto, com `> distros-deb-ok.txt` estamos indicando que, em vez de mostrar o resultado no terminal, ele deve ser salvo em um arquivo com este nome.
O que é simples?
Também podemos evitar o uso do arquivo distros-deb-ok.txt usando um parâmetro do sed , o parâmetro -i .
Em outras palavras, se quisermos remover a linha do arquivo e salvá-la com o mesmo nome (e não em outro arquivo), basta adicionar o parâmetro -i :
sed -i "3d" distros-deb.txt
Isso removerá a linha 3 de distros-deb.txt e salvará.
E se eu quiser um intervalo de linhas, ou seja, para remover a linha nº 3, mas também as linhas 4 e 5? Para isso, colocamos o intervalo de 3 a 5, ou seja:
sed -i "3,5d" distros-deb.txt
E vai me mostrar apenas debian e kubuntu
E se eu quiser excluir da linha 2 até a última, quando não sei o total de linhas?
Basta usar o símbolo do dólar - »$
sed -i "2,$d" distros-deb.txt
Caso você queira eliminar da primeira linha para a # 4, simplesmente colocamos o valor 1 no início:
sed -i "1,4d" distros-deb.txt
Basicamente é isso, uma dica bem útil para quem quer escrever scripts bash para automatizar tarefas e precisa modificar e excluir linhas em arquivos de configuração. Para modificar, podemos usar o sed ou o perl , e para excluir, já sabemos como fazer com o sed.
lembranças