Удалить все строки в файле, который содержит определенный символ - PullRequest
3 голосов
/ 31 мая 2011

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

Ответы [ 5 ]

9 голосов
/ 31 мая 2011

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

sed -i "/?/d" file

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

grep -v "?" file > newfile.txt
6 голосов
/ 31 мая 2011

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

sed '/?/d' input

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

3 голосов
/ 31 мая 2011
perl -i -ne'/\?/ or print' file

или

perl -i -pe's/^.*?\?.*//s' file
2 голосов
/ 31 мая 2011

Вот уже решения grep, sed и perl - только для удовольствия, чисто bash one:

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

переведенный

  • для каждой строки на STDIN
  • соответствует этому шаблону =~
  • и, если совпадение не удалось || - выведите строку
1 голос
/ 01 июня 2011
awk '!($0~/?/){print $0}' file_name
...