处理跨行匹配中的最后一行文本(!,N,$)

处理跨行匹配中的最后一行文本(!,N,$)

Content #

$ cat data4.txt
On Tuesday, the Linux System
Admin group meeting will be held.
All System Admins should attend.
$
$ sed 'N;
> s/System\nAdmin/DevOps\nEngineer/
> s/System Admin/DevOps Engineer/
> ' data4.txt
On Tuesday, the Linux DevOps
Engineer group meeting will be held.
All System Admins should attend.
$

由于最后一行进入模式空间后,再执行N命令会出错,从而导致命令

s/System Admin/DevOps Engineer/

并未执行,最后一行没有实现替换。

可以用感叹号来处理数据流中的最后一行文本:

$ sed '$!N;
> s/System\nAdmin/DevOps\nEngineer/
> s/System Admin/DevOps Engineer/
> ' data4.txt
On Tuesday, the Linux DevOps
Engineer group meeting will be held.
All DevOps Engineers should attend.
$

这个例子演示了如何将感叹号与N命令和美元符号($)特殊地址配合使用。美元符号表示数据流中的最后一行,因此当sed编辑器读取到最后一行时,不执行N命令,但会对所有其他行执行N命令。

From #

Linux命令行与shell脚本编程大全