我的Template.html
包含两个<pre>
标签,需要将来自两个不同文件的内容插入其中。以下插入所有匹配项的文件内容。如何仅插入第一或第二<pre>
标签?
sed -i -e '/<pre>/r file1.txt' Template.html
Template.html
:
<html>
<body>
<h1>
<pre>
</pre>
<div>
<pre>
</pre>
</body>
</html>
file1.txt
hello
world
file2.txt
may
june
预期结果:
<html>
<body>
<h1>
<pre>
hello
world
</pre>
<div>
<pre>
may
june
</pre>
</body>
</html>
答案 0 :(得分:0)
sed用于执行简单的s / old / new,仅此。听起来您想要的就是这样(将tgt设置为1或2或您想在其后插入块的任何<pre>
):
awk -v tgt=1 '
NR==FNR { rec = rec $0 ORS; next }
{ print }
/<pre>/ && (++cnt == tgt) { printf "%s", rec }
' file1.txt Template.html
但没有file1.txt
的示例,也没有预期的输出,这只是未经测试的猜测。
答案 1 :(得分:0)
这可能对您有用(GNU sed):
sed -e '/<pre>/{x;s/^/x/;/^x\{1\}$/{x;r file1.txt' -e 'x};x}' Template.html
遇到带有必需标记的行时,请在保留空间中增加一个计数器。
如果计数器与所需的数字匹配(在这种情况下为1),请附加文本文件。
因此,以下内容将在标签第三次出现后附加文件。
sed -e '/<pre>/{x;s/^/x/;/^x\{3\}$/{x;r file1.txt' -e 'x};x}' Template.html