sed - поиск в одном файле содержимого другого - PullRequest
0 голосов
/ 28 марта 2012

Итак, есть и другие подобные вопросы, но вот, в частности, что я хочу сделать -

У меня есть один действительно длинный файл.long.txt теперь выглядит как

line1 
line2
line3
line4
line1
line1
line2
line8
line1
line2

, у меня есть еще один файл pattern.txt, который выглядит как

line1
line2 

Наконец, replace.txt выглядит как

newline1
newline2 

Есть ли способ вызвать sed таким образом, что после запуска его на вышеприведенном, я получаю

newline1 
newline2
line3
line4
line1
newline1
newline2
line8
newline1
newline2

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Это может работать для вас (GNU sed):

cat <<\! >cat.sed
> :a;$!{N;ba};s/\n/\\n/ 
> !
sed ':a;$!'"{N;ba};s/$(sed -f cat.sed pattern.txt)/$(sed -f cat.sed replace.txt)/g" long.txt
newline1
newline2
line3
line4
line1
newline1
newline2
line8
newline1
newline2

Объяснение:

  • Построить LHS (шаблон) и RHS (заменить) для замены sedс использованием универсального сценария sed - cat.sed
  • Вставьте вышеуказанную замену в другой сценарий sed, который обрабатывает файл long.txt.
0 голосов
/ 28 марта 2012
$ paste -d'/' pattern.txt replace.txt | sed 's@.*@s/&/@' >script.sed
$ sed -f script.sed long.txt
...