Bash将内容插入第n个html标签

时间:2019-05-24 05:58:51

标签: shell sed

我的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>

2 个答案:

答案 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