如何添加字符串“< / font>“以<开头的行之后fc = ff00&gt ;,但不能连续添加两行?

时间:2016-11-24 18:14:29

标签: linux bash awk sed

考虑这个示例文件:

01
00:00:00,000 --> 00:00:00,000
<fc=ff00>Alphabetic characters.
02
00:00:00,000 --> 00:00:00,000
<fc=ff00>Alphabetic characters
Alphabetic characters,
03
00:00:00,000 --> 00:00:00,000
<fc=ff00>Alphabetic characters,

我想在一行文字中添加字符串。

01
00:00:00,000 --> 00:00:00,000
<fc=ff00>Alphabetic characters.</font>
02
00:00:00,000 --> 00:00:00,000
<fc=ff00>Alphabetic characters
Alphabetic characters,</font>
03
00:00:00,000 --> 00:00:00,000
<fc=ff00>Alphabetic characters,</font>

我不清楚如何排除第一行。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

这就是我认为你真正想要做的事情:

$ cat file
01
00:00:00,000 --> 00:00:00,000
Alphabetic characters.
02
00:00:00,000 --> 00:00:00,000
Alphabetic characters
Alphabetic characters,
03
00:00:00,000 --> 00:00:00,000
Alphabetic characters,

$ cat tst.awk
/^[[:alpha:]]/ { buf = (buf ? buf RS : "") $0; next }
buf { printf "<fc=ff00>%s</font>\n", buf; buf="" }
{ print }
END { if (buf) printf "<fc=ff00>%s</font>\n", buf }

$ awk -f tst.awk file
01
00:00:00,000 --> 00:00:00,000
<fc=ff00>Alphabetic characters.</font>
02
00:00:00,000 --> 00:00:00,000
<fc=ff00>Alphabetic characters
Alphabetic characters,</font>
03
00:00:00,000 --> 00:00:00,000
<fc=ff00>Alphabetic characters,</font>

答案 1 :(得分:1)

如果你想使用sed:

sed -n -e '/^<fc=ff00>[a-zA-Z ,.]\+/! p;' \
       -e '/^<fc=ff00>[a-zA-Z ,.]\+/ { :start $! N; /\n[a-zA-Z ,.]\+$/  b start;  s/\(.*\)\n/\1<\/font>\n/p; $ s/\(.*\)/\1<\/font>/p}' \
       file

如果您想要进行言论,请随时提出。

答案 2 :(得分:0)

这可能适合你(GNU sed):

 sed 'N;/[[:alpha:]].*\n[^[:alpha:]]*$/s/\n/<\/font>&/;$s/$/<\/font>/;P;D' file

一次读取两行,如果第一行包含字母字符而第二行不包含,则在换行符之前插入所需的字符串。始终在文件的最后一行执行上述替换。然后打印并删除两行中的第一行,并在下一个循环中追加另一行,依此类推。