>[оверквотинг удален]
>> /^ip$/d не проходит, не понимает он конец строки $ (не понимает имеенно
>> в sh скрипте)
> нужно экранирование, т.е.
> for a in `cat /path/to/file2`; do sed -i -e "/$a\$/d" path/to/file1; done
> если IP действительно стоит в конце строки. Зачастую перед "концом" стоки еще
> стоит пробел, и тогда регэксп не отработает, следует видоизменить на "/$a
> /d".
> Ну или у вас могут быть какие-то другие характерные признаки, если IP
> стоит в тексте между другими словами/символами, тогда добавьте два пробела "/
> $a /d". В общем, экспериментируйте.А вы сами пробовали с экранированием?
Я - да, не помогает. Причём, в различных вариациях.
И с двумя кавычками, и с одной. Результат один.
Потому как у sed'а своё "понимание" $(конец строки) ,
а у sh - своё (переменная)
cat file1
text1 192.168.1.1 text
text2 192.168.2.1 text
text2 192.168.2.11 text
text3 192.168.3.1 text
cat file2
192.168.2.1
cat test.sh
/bin/sh
ip="file2"
for i in $(cat ${ip}); do
sed -i '' /$i/d file1
done
sed -i "" /$i/d file1
sed -i "" /$i$/d file1
sed -i "" '/$i$/d' file1
sed -i "" "/$i$/d" file1
Безрезультатно. И если заслешивать конец строки - то есть \$
А вот с пробелами - работает.
Или с дополнительным символом в конце ip адреса,
например если file1 имеет вид
text1 192.168.1.1; text
text2 192.168.2.1; text
text2 192.168.2.11; text
text3 192.168.3.1; text
тогда - да так работает - sed -i "" /$i\;/d file1
Спасибо за помощь!