sed - 在一个文件中搜索另一个文件的内容

时间:2012-03-28 04:54:07

标签: sed

所以还有其他类似的问题,但这里特别是我想要做的事情 -

我有一个非常长的文件。 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 个答案:

答案 0 :(得分:2)

这可能适合你(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

说明:

  • 使用通用sed脚本构建sed替换的LHS(模式)和RHS(替换) - cat.sed
  • 将上述替换插入另一个处理sed文件的long.txt脚本。

答案 1 :(得分:0)

$ paste -d'/' pattern.txt replace.txt | sed 's@.*@s/&/@' >script.sed
$ sed -f script.sed long.txt