Remover linhas que contenham caminho de arquivo usando sed

1

Eu tenho uma lista de linhas em um arquivo que se parece com isso:

6642a51e0ed5e6f89e5e4090b9aa0fb3  /home/device/eth0/uid
d66d1417251a9a151176c34acf046878  /home/device/eth0/uid64
db5c3c9d348ce26169c56901a7606961  /home/device/eth1/dhcp
226c1a53543bddcca5d136fdd5700f4c  /home/device/eth1/ipv4
13b376c06f904b607c2a23bd76115595  /home/device/eth1/netmask

Eu quero remover algumas linhas deste arquivo sem linhas em branco.

Eu achei o sed como o comando apropriado, embora eu tenha tentado algumas maneiras e veja o trabalho de outras pessoas que ainda não sei como fazer isso.

Isso é o que eu tenho sed -i "s|'/home/device/pn'|d" TestRun.chk

Mas isso não funciona ... Eu li artigos sobre como quebrar a barra e como não usá-la. Eu não tenho a menor ideia de que isso funciona para a minha situação.

Sua ajuda é muito apreciada!

EDITAR:

Exemplo de entrada:

6642a51e0ed5e6f89e5e4090b9aa0fb3  /home/device/eth0/uid
d66d1417251a9a151176c34acf046878  /home/device/eth0/uid64
db5c3c9d348ce26169c56901a7606961  /home/device/eth1/dhcp
226c1a53543bddcca5d136fdd5700f4c  /home/device/eth1/ipv4
13b376c06f904b607c2a23bd76115595  /home/device/eth1/netmask

Depois de executar o comando sed para remover /home/device/eth1/ipv4 da saída esperada:

6642a51e0ed5e6f89e5e4090b9aa0fb3  /home/device/eth0/uid
d66d1417251a9a151176c34acf046878  /home/device/eth0/uid64
db5c3c9d348ce26169c56901a7606961  /home/device/eth1/dhcp
13b376c06f904b607c2a23bd76115595  /home/device/eth1/netmask
    
por visc 22.03.2016 / 18:30

2 respostas

2

Usando sed , você pode fazer:

$ sed -i '\| pattern to match |d' File

Isso removerá as linhas que contêm pattern to match no arquivo.

Usando o grep, você pode fazer:

$ echo "$(grep -v "pattern to match" File)" > File

A opção -v permite o uso de linhas não contendo pattern to match , que é redirecionado novamente para o arquivo.

    
por 22.03.2016 / 18:48
-1

Como eu vejo o seu arquivo contém caracteres especiais / você pode este comando para remover qualquer linha, você deve especificar a característica de string de cada linha, por exemplo, a segunda linha é "uid64":

sed -i '\|uid64|d' testRun.chk
In my pc it's print this without blank line :
6642a51e0ed5e6f89e5e4090b9aa0fb3  /home/device/eth0/uid
db5c3c9d348ce26169c56901a7606961  /home/device/eth1/dhcp
226c1a53543bddcca5d136fdd5700f4c  /home/device/eth1/ipv4
13b376c06f904b607c2a23bd76115595  /home/device/eth1/netmask

Como você pode ver, não existe a segunda linha que você pode fazer para a seguinte linha " sed -i '\|ipv4|d' testRun.chk " e assim por diante.

Boa sorte!

    
por 09.02.2018 / 17:49

Tags