Использование sed для удаления всей строки, если она содержит только определенное число

8

У меня есть текстовый файл

123
456
789
456
123456

Я хочу удалить определенные символы из файла т.е. (123). Я пробовал с

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

В приведенной ниже команде, когда я запускаю, оба слова ( 123и 123456) удаляются, но мне нужно удалить только 123из файла

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

когда я запускаю приведенную ниже команду, 123она заменяется нулем.

Кто-нибудь может сказать, как удалить целую строку, если она содержит только конкретный номер?

Рак кундра
источник
2
Одним
я не понял, что вы спрашиваете?
Рак кундра
1
Обратите внимание, что хотя для этой задачи вполне допустимо использовать sed, grep - это инструмент, который был создан специально для отображения или скрытия строк ввода, соответствующих шаблону. В этом случае следующая команда grep сделает то же самое: grep -E -v '^ 123 $' dumm.txt
Gnudiff
4
@ Gnudiff Я не вижу никакого преимущества, grepесли вы используете, как это. Но он может быть лучше для некоторых задач из-за его опций:grep -xv 123
Филиппос

Ответы:

19

Неясно, пытаетесь ли вы удалить всю строку 123или заменить ее пустой строкой. В любом случае, просто добавьте привязки начала ^и конца $строки к вашему шаблону:

sed -i '/^123$/d' dummy.sh      #delete whole line
sed -i 's/^123$//' dummy.sh     #replace with empty line
jimmij
источник
Да, я получил свой ответ, спасибо :). Я пытаюсь удалить всю строку здесь.
Рак кундра