Удалить строки в текстовом файле, которые содержат определенную строку - PullRequest
1574 голосов
/ 23 марта 2011

Как бы я использовал sed, чтобы удалить все строки в текстовом файле, которые содержат определенную строку?

Ответы [ 14 ]

2 голосов
/ 17 сентября 2016

echo -e "/thing_to_delete\ndd\033:x\n" | vim file_to_edit.txt

2 голосов
/ 30 июня 2014
perl -i    -nle'/regexp/||print' file1 file2 file3
perl -i.bk -nle'/regexp/||print' file1 file2 file3

Первая команда редактирует файл (ы) на месте (-i).

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

1 голос
/ 31 мая 2018
cat filename | grep -v "pattern" > filename.1
mv filename.1 filename
0 голосов
/ 02 марта 2017

На всякий случай, если кто-то захочет сделать это для точного соответствия строк, вы можете использовать флаг -w в grep - w для целого.То есть, например, если вы хотите удалить строки с номером 11, но оставить строки с номером 111:

-bash-4.1$ head file
1
11
111

-bash-4.1$ grep -v "11" file
1

-bash-4.1$ grep -w -v "11" file
1
111

Он также работает с флагом -f, если вы хотите исключить несколько точныхшаблоны сразу.Если «черный список» - это файл с несколькими шаблонами в каждой строке, который вы хотите удалить из «файла»:

grep -w -v -f blacklist file
...