Em certas ocasiões, precisamos deletar uma linha específica de um arquivo ou vários, por exemplo, aconteceu comigo que eu tinha uma lista completa de arquivos e preciso deletar a linha # 27 de todos eles (a linha # 27 é que de uma ACL, norma, regra, configuração), posso editar arquivo por arquivo ou posso apenas conseguir o que preciso usando o comando sede e um script bash (opcional).
Mas, vamos tentar um único arquivo um tanto simples.
Nós temos o arquivo distribuições-deb.txt que contém este:
debian
kubuntu
archlinux
solos
hortelã
Ou seja, o arquivo distribuições-deb.txt é onde colocaremos as distros baseadas em Debian, mas lá vemos que na linha # 3 há "archlinux", uma distro que obviamente não tem nada a ver com o Debian, então devemos eliminar essa linha. Para eliminar a linha nº 3 desse arquivo, colocaremos o seguinte:
sed "3d" distros-deb.txt > distros-deb-ok.txt
Explicar esta linha é um tanto fácil, com sede "3d" estamos indicando que excluiremos a linha # 3, com distribuições-deb.txt Indicamos em qual arquivo trabalhar, ou seja, deletar a linha # 3 deste arquivo, até aqui se pressionarmos Enter ele nos mostrará o que queremos mas no terminal, então com > distros-deb-ok.txt estamos indicando que ao invés de mostrar o resultado no terminal, que o coloque em um arquivo com este nome.
O que é simples?
Além disso, podemos evitar o uso do > distros-deb-ok.txt usando um parâmetro adequado de sede, o parâmetro -i
Ou seja, caso desejemos deletar 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
Isso tem sido tudo, uma dica muito útil quando você quer fazer scripts bash para automatizar tarefas e precisa modificar e eliminar linhas de arquivos de configuração, para modificar podemos usar sede o perl, assim como para eliminar já sabemos como fazer com sed
lembranças
Muito boa contribuição 😉
Obrigado
A propósito, recebemos seu e-mail agora mesmo eu respondo 😀
lembranças
Como sumo sacerdote do terminal, servidores e conexões ssh, venho até você, que bom KZKG ^ Gaara, e pergunto: onde posso obter um tutorial no nível da minha ignorância que me permite usar conexões ssh entre duas máquinas remotas em redes diferentes para compartilhar arquivos de texto, pdf, imagem e som (mp3)….
🙂
Sério, você poderia me orientar nesse sentido, eu tenho duas máquinas, uma no trabalho e outra em casa e preciso de uma conexão ssh entre elas (porque, pelo que entendi, ssh permite que conteúdo seja compartilhado entre máquinas, certo?).
E se eu estiver errado, qual aplicativo você recomenda?
E onde encontro um tutorial básico a esse respeito?
scp
scp user @ machine_address: path user @ machine_address: path.
Mesma sintaxe que cp, origem -> destino.
Você apareceu cara, você estava perdido.
Boa dica!
Dica interessante ... xD
Você conhece algum que destaque o texto em negrito?
Quer dizer, eu tenho um arquivo txt que é um dicionário, tem mais de 10000 linhas e quero destacar determinado texto antes dos pontos de suspensão ":" e fazer isso um por um é demais.
Olá,
Um arquivo txt é um texto simples, como o nome indica ... simples, sem formatos ou algo semelhante, desculpe, mas acho que o que você pergunta não pode ser feito, pode? 🙁
lembranças
na verdade, pode, mas você precisa saber o formato de destino.
educaçao Fisica:
echo $ (echo "Robert: Olá. Mude aqui" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
é uma questão de enfrentamento.
a outra maneira de deletar que pode ser usada é sed '/' $ 1 '/ d', mas você tem que ter certeza de onde está.
em seguida, termine de salvá-lo em * .odt
Não existe uma maneira mais fácil de fazer isso com o LibreOffice?
Você poderia deletar parte de uma linha e deixar o resto?
Digamos que eu queira excluir tudo na frente de uma palavra em uma determinada linha.
Ou exclua tudo o que segue essa palavra.
Sim, é uma questão de puxar um regex (se necessário man sed -r, -regexp-extended)
Começando pelo que eu acho
echo «Robert: Olá. Mude aqui »| sed 's / Alterar //'
com um padrão bem definido e com. (um caractere) e * (mais de um)
Depois:
echo «Robert: Olá. Mude aqui »| sed 's / Change. * //'
Antes de:
echo «Robert: Olá. Mude aqui »| sed 's /. * Alterar //'
Se importa que a palavra apareça
echo «Robert: Olá. Mude aqui »| sed 's / Change. * / Change /'
ou mais elaborado
na linha contendo Robert o que vem depois da Mudança
echo -e «Fritz: Olá. Mude aqui \ nRobert: Olá. Mude aqui »| sed '/Robert/s/Cambio.*//'
ou como no início, retire a segunda linha e processe o resto
echo -e «Fritz: Olá. Mude aqui \ nRobert: Olá. Mude aqui \ nOutros »| sed -e 2d -e 's / Change. * //'
echo -e «Fritz: Olá. Mude aqui \ nRobert: Olá. Mude aqui \ nOutros »| sed '2d; s / Change. * //'
Obrigado, é muito útil para mim.
Bom artigo, um dos que eu gosto, que bom o SysAdmin!
O que seria a nossa vida sem sed, awek, perl, grep, tail, head, "Emacs" e tantas outras ferramentas essenciais!?
Obrigado, foi muito útil.
Olá, e como você poderia deletar as linhas 1,4 e 10 de um arquivo no mesmo comando?