Sed-将标签添加到行的开头和结尾,同时跳过空行

时间:2018-10-23 19:50:35

标签: linux sed

我有多个文本文件,我试图将段落标签

添加到文件中每一行的开头和结尾,同时跳过第一行和空行。 >

到目前为止,我想出了以下代码,但它并没有跳过空行,而是在新行中添加了下面的

for i in *.txt; do sed -i -e '1 ! s/.*/<p>&<\/p>/' $i; done

例如,假设文本文件如下所示:

This Is the File Name

Paragraph 1

Paragraph 2

Paragraph 3

Paragraph 4

这是我通过代码获得的输出

This Is the File Name
<p>
</p>
<p>Paragraph 1
</p>
<p>
</p>
<p>Paragraph 2
</p>
<p>
</p>
<p>Paragraph 3
</p>
<p>
</p>
<p>Paragraph 4</p>

我想得到的是这样的:

This Is the File Name

<p>Paragraph 1</p>

<p>Paragraph 2</p>

<p>Paragraph 3</p>

<p>Paragraph 4</p>

2 个答案:

答案 0 :(得分:1)

发生这种情况是因为.*匹配空字符串。只需使用..*使其至少需要一个字符即可:

$ sed -i -e '1 ! s|..*|<p>&</p>|' file.txt
$ cat file.txt
This Is the File Name

<p>Paragraph 1</p>

<p>Paragraph 2</p>

<p>Paragraph 3</p>

<p>Paragraph 4</p>

答案 1 :(得分:0)

使用awk:

 awk '$1 !~ /^$/ {print "<p>" $0 "</p>"} $1 ~ /^$/ { print ""}' file