sed 是用于在单行上进行简单替换的出色工具,对于其他任何事情,只需使用 awk 来实现可移植性、可扩展性、简单性、可读性等:
$ awk 'found{print $0, "ABCDE"; found=0; next} {print} /HEADER 1/{found=1}' file
HEADER 1
12345 ABCDE
HEADER 2
12345
HEADER 1
12345 ABCDE
HEADER 2
12345
并且预先挂起只是“ABCDE”和$ 0的明显切换顺序:
$ awk 'found{print "ABCDE", $0; found=0; next} {print} /HEADER 1/{found=1}' file
HEADER 1
ABCDE 12345
HEADER 2
12345
HEADER 1
ABCDE 12345
HEADER 2
12345
如果您使用 s、g、p(带 -n)以外的 sed 语言结构,那么您使用的工具是错误的,因为在 1970 年代中期,当 awk 被发明时,所有其他 sed 语言结构都已过时。
如果您对此表示怀疑,请尝试修改产生上述输出的 sed 脚本以执行其他任何操作,例如,打印在每行末尾添加 ABCDE 的次数。这是awk:
$ awk 'found{print $0, "ABCDE", ++count; found=0; next} {print} /HEADER 1/{found=1}' file
HEADER 1
12345 ABCDE 1
HEADER 2
12345
HEADER 1
12345 ABCDE 2
HEADER 2
12345
我不敢想象 sed 做这么简单的事情会是什么样子。