Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何添加字符串“</字体>”;在以<;开头的行之后;fc=ff00>;,但不添加两个连续的行吗?_Linux_Bash_Awk_Sed - Fatal编程技术网

Linux 如何添加字符串“</字体>”;在以<;开头的行之后;fc=ff00>;,但不添加两个连续的行吗?

Linux 如何添加字符串“</字体>”;在以<;开头的行之后;fc=ff00>;,但不添加两个连续的行吗?,linux,bash,awk,sed,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 characte

考虑以下示例文件:

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
字母字符。
02
00:00:00,000 --> 00:00:00,000
字母字符
字母字符,
03
00:00:00,000 --> 00:00:00,000
字母字符,
我想在一行文本中添加字符串

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>
01
00:00:00,000 --> 00:00:00,000
字母字符。
02
00:00:00,000 --> 00:00:00,000
字母字符
字母字符,
03
00:00:00,000 --> 00:00:00,000
字母字符,

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

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

$ 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>
$cat文件
01
00:00:00,000 --> 00:00:00,000
字母字符。
02
00:00:00,000 --> 00:00:00,000
字母字符
字母字符,
03
00:00:00,000 --> 00:00:00,000
字母字符,
$cat tst.awk
/^[[:alpha:][]/{buf=(buf?buf-RS:)$0;next}
buf{printf“%s\n”,buf;buf=”“}
{print}
结束{if(buf)printf“%s\n”,buf}
$awk-f tst.awk文件
01
00:00:00,000 --> 00:00:00,000
字母字符。
02
00:00:00,000 --> 00:00:00,000
字母字符
字母字符,
03
00:00:00,000 --> 00:00:00,000
字母字符,

这就是我认为您真正想要做的:

$ 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>
$cat文件
01
00:00:00,000 --> 00:00:00,000
字母字符。
02
00:00:00,000 --> 00:00:00,000
字母字符
字母字符,
03
00:00:00,000 --> 00:00:00,000
字母字符,
$cat tst.awk
/^[[:alpha:][]/{buf=(buf?buf-RS:)$0;next}
buf{printf“%s\n”,buf;buf=”“}
{print}
结束{if(buf)printf“%s\n”,buf}
$awk-f tst.awk文件
01
00:00:00,000 --> 00:00:00,000
字母字符。
02
00:00:00,000 --> 00:00:00,000
字母字符
字母字符,
03
00:00:00,000 --> 00:00:00,000
字母字符,

如果要使用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
sed-n-e'/^[a-zA-Z,.]\+/!p、 "\
-e'/^[a-zA-Z,.]\+/{:start$!N;/\N[a-zA-Z,.]\+$/b start;s/\(.*)\N/\1\N/p;$s/\(.\)/\1/p}\
文件

如果您想解释,请随时提问。

如果您想使用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
sed-n-e'/^[a-zA-Z,.]\+/!p、 "\
-e'/^[a-zA-Z,.]\+/{:start$!N;/\N[a-zA-Z,.]\+$/b start;s/\(.*)\N/\1\N/p;$s/\(.\)/\1/p}\
文件
如果您想解释,请随时提问。

这可能适合您(GNU-sed):

sed'N/[[:alpha:][].\n[^[:alpha:][]*$/s/\n/&/$s/$/;PD'文件
一次读取两行,如果第一行包含字母字符,而第二行不包含字母字符,请在换行之前插入所需字符串。始终在文件的最后一行执行上述替换。然后打印并删除两行中的第一行,并在下一个周期中追加另一行,依此类推。

这可能适合您(GNU-sed):

sed'N/[[:alpha:][].\n[^[:alpha:][]*$/s/\n/&/$s/$/;PD'文件

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

你几天前没有问过这个问题吗?@Jean-Françoisfar:我相信这个问题就是这个问题的前奏。@Jean-Françoisfar有点不同,我需要帮助添加后缀而不是前缀。你真的不想同时做这两件事吗?@EdMorton如果可能的话,那太好了!!几天前你没有问过这个问题吗?@Jean-Françoisfar:我相信这个问题就是这个问题的前奏。@Jean-Françoisfar有点不同,我需要帮助添加后缀而不是前缀。你真的不想同时做这两件事吗?@EdMorton如果可能,那太好了!!