LinuxForum.Fans
Тема

sed чтение из файла и удаление

Автор: 4fun 6 сообщений 3509 просмотров
#362854

Здравствуйте. Имеется 2 файла: file1.txt и file2.txt. Допустим, file1.txt содержит строки

ololo 1
olo 2
lol 3

Эти строки также имеются в file2.txt, но помимо них там есть еще и другие строки. Необходимо реализовать чтение файла file1.txt и удаление этих строк из file2.txt. Сделал построчное чтение из file1.txt

text
cat file1.txt | while read line
do
sed -i "/$line/d" file2.txt
done

Но ничего не получается. Пробовал и sed -i '#${line}#d' file2.txt и sed -i "/\$line/d" file2.txt - эффекта никакого. Подскажите, пож, как сие можно осуществить.

#362863

Странно, у меня все работает:
[console]$ cat file1.txt
ololo 1
olo 2
lol 3

$ cat file2.txt
olo 2
lol 3
olo 2
lol 31
ololo 1
lol 13
bla
ololo 11
lol 31
foo
ololo 1
olo 2
ololo 11
olo 2
======

$ while read line; do sed -i "/$line/d" file2.txt; done < file1.txt; cat file2.txt
lol 13
bla
foo
======[/console]

Я, правда, убрал ненужный cat, но с ним тоже проблем не возникает:
[console]$ cat file1.txt | while read line; do sed -i "/$line/d" file2.txt; done; cat file2.txt
lol 13
bla
foo
======[/console]

P. S. А вы случаем не во FreeBSD работаете? Если нет, то каким дистрибутивом и какой версией sed пользуетесь?

#362865

Мистика, и у меня заработало, но почему-то из file2.txt удаляется только первая строка, которая записана в file1.txt
Сам скрипт

text
#!/bin/bash
cat cvars.txt | while read line
do
sed -i "/$line/d" test.txt
done
#362901

Все, нашел ошибку. Не оставил в файле file1.txt чистую строку. Спасибо.

#362909

И опять хрень какая-то. Скопировал скрипт, который отлично работал на домашнем компе, на сервер. При выполнении получаю
[console]
sed: -e expression #1, char 14: unknown command: `/'
[/console]
Что сие значит? Уже пробовал и на сервере набрать эту команду - бестолку.

#362928

Проблема в том, как оказалось, что в $lines были выражения со слешами.

Войдите или зарегистрируйтесь, чтобы ответить.