1 (24.01.2013 18:11:08 отредактировано vovanvster)

При помощи sed очень просто удалять строки содержащие определённые слова. (Решено)

sed -i /"string"/d file.txt

А если значений "string" много ? Можно ли автоматизировать чтобы не пришлось снова и снова вводить одну и ту же команду с разными значениями ? Какой нибудь простой скрипт, для считывания по очереди строк из одного файла и передачи их для sed в качестве масок.

Понимаю что для этой задачи надо написать что-то на питоне но для начала меня устроит и самое простое решение.
Заранее благодарен.

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.

2

Если нужно удалить именно строку, достаточно возможностей grep:

 Консоль:

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

Был, был и весь вышел...

3 (24.01.2013 14:30:15 отредактировано vovanvster)

К сожалению этого не достаточно. Из первого файла надо удалить все строки которые содержат в себе как фрагменты строки из второго файла.

#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".

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.

4

 Консоль:

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

Был, был и весь вышел...

5 (24.01.2013 14:42:16 отредактировано Lupo Alberto)

 Консоль:

lupo@gentoo-laptop /tmp $ sed -i '/[123|789]/d' file_1.txt
lupo@gentoo-laptop /tmp $ cat file_1.txt
456dfyjh
456fjthk
456jzdfjj

Был, был и весь вышел...

6 (24.01.2013 15:22:51 отредактировано vovanvster)

Второй вариант не подходит если значений несколько десятков. А от grep я таких чудес не ожидал.
Пойду внимательно читать man grep.

Да, с использованием grep всё получилось. Спасибо Вам огромное.

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.

7

Чтобы не было проблем со спец. символами, используйте fgrep или grep -F.

ЗЫ. И не работайте от root bx

Да, у меня Ubuntu.
Нет, не глючит.

8

Спасибо, учту. Хотя в этот раз я по ошибке не тот файл подсунул.

P.S. Использую su  bs

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной.