我有一个包含以下内容的文件。
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 *
这将在 sed 执行之前读取文件:
sed -r "s#(<spec>)(</spec>)#\\1$(<file.txt)\\2#" infile
我假设 bash。如果您使用另一个外壳替换$(<file)为$(cat file)
如果文件内容包含#. 您可以更改s###分隔符,但您将始终面临相同的风险。
这个怎么样:
sed 's#\(.*\)#<spec>\1</spec>#' input_file
要进行 infile 替换,您可以使用-i选项。但是,请小心。您可以在替换之前使用 -i"bak" 来备份文件。
sed -i"bak" 's#\(.*\)#<spec>\1</spec>#' input_file
awk '/\<spec\>/ { getline a < "dynamic.txt"; sub (/></, ">"a"<", $0); print ;next}1' infile
您可以混合使用 bash 和 sed。
while read -r value; do
sed -i "s/></>$value</" infile ;
done < dynamic.txt