Удалить все строки в файле, содержащие определенный символ

Я хочу удалить все строки/строки в файле с определенным символом '?' в моем случае. Я надеюсь, что в Bash, AWK или Perl есть однострочная команда. Спасибо


person discipulus    schedule 31.05.2011    source источник


Ответы (3)


Вот уже решения для grep, sed и perl — только для забавы, чистый bash:

pattern='?'
while read line
do
    [[ "$line" =~ "$pattern" ]] || echo "$line"
done

переведено

  • для каждой строки в STDIN
  • сопоставьте его с образцом =~
  • и если совпадение не удачное || - вывести строку
person jm666    schedule 31.05.2011

Вы можете использовать sed для изменения файла «на месте»:

sed -i "/?/d" file

В качестве альтернативы используйте grep:

grep -v "?" file > newfile.txt
person dogbane    schedule 31.05.2011
comment
Вы можете использовать -i с GNU sed; это не стандартно для других версий, в общем. - person Jonathan Leffler; 31.05.2011

Еще лучше, всего одна строка с использованием sed

sed '/?/d' input

используйте -i для редактирования файла на месте.

person Fredrik Pihl    schedule 31.05.2011
comment
и насколько я понимаю, вы не можете сделать это в Perl, верно? perl -pe '/?/d' не работает. - person kirill_igum; 18.01.2017