При помощи sed очень просто удалять строки содержащие определённые слова. (Решено)
sed -i /"string"/d file.txt
А если значений "string" много ? Можно ли автоматизировать чтобы не пришлось снова и снова вводить одну и ту же команду с разными значениями ? Какой нибудь простой скрипт, для считывания по очереди строк из одного файла и передачи их для sed в качестве масок.
Понимаю что для этой задачи надо написать что-то на питоне но для начала меня устроит и самое простое решение.
Заранее благодарен.
Удаление строк по маске легко, а если масок много ?
Если нужно удалить именно строку, достаточно возможностей grep:
[console]
lupo@gentoo-laptop /tmp % cat template.txt
123
456
789
lupo@gentoo-laptop /tmp % cat test.txt
123
234
345
678
456
789
lupo@gentoo-laptop /tmp % grep -v -f template.txt test.txt
234
345
678
[/console]
К сожалению этого не достаточно. Из первого файла надо удалить все строки которые содержат в себе как фрагменты строки из второго файла.
#cat file_1.txt
123djhjkd
123drhg
123sshjkds
456dfyjh
456fjthk
456jzdfjj
789dhgj
789fgkjj
#cat file_2.txt
123
789
#sed -i /"123"/d file_1.txt
#sed -i /"789"/d file_1.txt
#cat file_1.txt
456dfyjh
456fjthk
456jzdfjj
В данном примере надо удалить строки которые содержат "123" и "789".
[console]
lupo@gentoo-laptop /tmp $ cat file_1.txt
123djhjkd
123drhg
123sshjkds
456dfyjh
456fjthk
456jzdfjj
789dhgj
789fgkjj
lupo@gentoo-laptop /tmp $ cat file_2.txt
123
789
lupo@gentoo-laptop /tmp $ grep -v -f file_2.txt file_1.txt
456dfyjh
456fjthk
456jzdfjj
[/console]
[console]
lupo@gentoo-laptop /tmp $ sed -i '/[123|789]/d' file_1.txt
lupo@gentoo-laptop /tmp $ cat file_1.txt
456dfyjh
456fjthk
456jzdfjj
[/console]
Второй вариант не подходит если значений несколько десятков. А от grep я таких чудес не ожидал.
Пойду внимательно читать man grep.
Да, с использованием grep всё получилось. Спасибо Вам огромное.
Чтобы не было проблем со спец. символами, используйте fgrep или grep -F.
ЗЫ. И не работайте от root ;)
Спасибо, учту. Хотя в этот раз я по ошибке не тот файл подсунул.
P.S. Использую su *YES*