使用sed在特定行之后附加HTML代码块

时间:2018-07-11 10:01:13

标签: linux bash shell awk sed

我正在尝试在特定行之后附加一个html代码块(在Shell变量中)。 例如:-

name="john"
link="www.test.com"
jobname="testjob"

data="<tr>
<td>$name</td>
<td><a href=$link>$link</a></td>
<td>$jobname</td>
<td>Running: <progress value="22" max="100">
</progress>
</td>
<td>Running: <progress value="22" max="100">
</progress>
</td>
<tr>"

sed '/\<tbody\>/a \\$data' filename

文件名包含:-

<html>
<tbody>

我需要在文件名中的行后附加Shall Variable内容。 感谢响应。

2 个答案:

答案 0 :(得分:1)

如果您可以将$data而不是shell变量存储在文件中(可以使用临时文件),则可以使用r filename来读取和插入内容:

echo $data > temp.html
sed "/<tbody>/ r temp.html" filename

有关更多详细信息,请参见sed command listless frequently used commands

答案 1 :(得分:0)

sed用于s / old / new /,仅此而已(例如,请参见Is it possible to escape regex metacharacters reliably with sed,以获取有关sed试图将字符串视为字符串的恐惧),并且您需要修正引号和转义。试试这个(未试用):

name='john'
link='www.test.com'
jobname='testjob'

data='<tr>
<td>'"$name"'</td>
<td><a href='"$link"'>'"$link"'</a></td>
<td>'"$jobname"'</td>
<td>Running: <progress value="22" max="100">
</progress>
</td>
<td>Running: <progress value="22" max="100">
</progress>
</td>
<tr>'

awk '
BEGIN {
    data = ARGV[2]
    ARGV[2] = ""
    ARGC--
}
{ print }
/<tbody>/ { print data }
' file "$data"