我有一个包含以下内容的文件。
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 *
答案 0 :(得分:0)
这个怎么样:
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
答案 1 :(得分:0)
这将在sed执行之前读取文件:
sed -r "s#(<spec>)(</spec>)#\\1$(<file.txt)\\2#" infile
我假设bash。如果您使用另一个shell,请将$(<file)
替换为$(cat file)
如果文件内容包含#
,则会出现问题。您可以更改s###
分隔符,但风险始终相同。