2

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

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

H 0 7 11 *

我想使用sed如下示例将它们插入两个模式匹配之间,

文件内容

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

我试过跟随但我失败了:(它低于那条线。

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

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

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

2 回答 2

0

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

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

我假设 bash。如果您使用另一个外壳替换$(<file)$(cat file)

如果文件内容包含#. 您可以更改s###分隔符,但您将始终面临相同的风险。

于 2013-05-29T19:58:50.857 回答
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 
于 2013-05-29T14:09:45.910 回答