sed在两个关键字之间插入文件输出

时间:2013-05-29 14:04:38

标签: regex sed

我有一个包含以下内容的文件。

file.txt(注意:文件内容不是静态的,它是动态的)

H 0 7 11 *

我希望使用sed在两个模式匹配之间插入它们,如下例

infile content

...
...
<spec>H 0 7 11 *</spec>
...
...

我试过跟随但是我失败了:(它放在那条线下面。

   $ sed '/<spec>/ r file.txt' infile

这是我得到的输出我如何把它放在两个匹配之间?

 <spec></spec>
   H 0 7 11 *

2 个答案:

答案 0 :(得分:0)

这个怎么样:

sed 's#\(.*\)#<spec>\1</spec>#' input_file

更新

要进行infile替换,您可以使用-i选项。但是,请小心。在进行替换之前,您可以使用-i“bak”来备份文件。

sed -i"bak" 's#\(.*\)#<spec>\1</spec>#' input_file

更新2:

awk '/\<spec\>/ { getline a < "dynamic.txt"; sub (/></, ">"a"<", $0); print ;next}1' infile 

更新3:

你可以混合使用bash和sed。

while read -r value; do  
    sed -i "s/></>$value</" infile ; 
done < dynamic.txt 

答案 1 :(得分:0)

这将在sed执行之前读取文件:

sed -r  "s#(<spec>)(</spec>)#\\1$(<file.txt)\\2#" infile

我假设bash。如果您使用另一个shell,请将$(<file)替换为$(cat file)

如果文件内容包含#,则会出现问题。您可以更改s###分隔符,但风险始终相同。