Usando sed para excluir uma linha inteira se ela contiver apenas um número específico

8

Eu tenho um arquivo txt

123
456
789
456
123456

Quero excluir caracteres específicos do arquivo, ou seja, (123). Eu tentei com

$ sed -i '/123/d' dummy.sh
$ vi dumm.txt
456
789
456

No comando abaixo, quando executo, as duas palavras ( 123e 123456) estão sendo excluídas, mas preciso excluir apenas 123do arquivo

$ sed -i 's/123//g' dummy.sh
$ vi dumm.txt
456
789
456
456

quando executo o comando abaixo, o 123está sendo substituído por nulo.

Alguém pode dizer como excluir uma linha inteira se ela contiver apenas um número específico?

Rak kundra
fonte
2
Em uma palavra - anchors
steeldriver
eu não entendi o que você está perguntando?
Rak Kundra
1
Observe que, embora seja perfeitamente aceitável usar o sed para esta tarefa, o grep é a ferramenta que foi criada especificamente para exibir ou ocultar linhas de entrada correspondentes ao padrão. Nesse caso, o seguinte comando grep faria o mesmo: grep -E -v '^ 123 $' dumm.txt
Gnudiff
4
@ Gnudiff Não vejo nenhuma vantagem grepse você usar é assim. Mas pode ser superior para algumas tarefas devido à sua opções:grep -xv 123
Philippos

Respostas:

19

Não está claro se você está tentando excluir uma linha inteira 123ou substituí-la por uma linha vazia. De qualquer forma, basta adicionar âncoras do início ^e do fim $da linha ao seu padrão:

sed -i '/^123$/d' dummy.sh      #delete whole line
sed -i 's/^123$//' dummy.sh     #replace with empty line
jimmij
fonte
Sim, eu tenho a minha resposta obrigado :). Estou tentando excluir a linha inteira aqui.
Rak Kundra