sed高级编程(一)
sed编辑器包括3个特殊命令,用来处理多行文本:
- N:在数据流刘中添加下一行以创建用于处理的多行组。
- D:删除多行组中的单隔行。
- P:打印多行组中的单隔行。
- next命令,小写n命令使sed移动到数据流中文本的下一行。
- 单行next命令移动数据流文本的下一行进入sed编辑器的处理空间(模式空间)。next命令的多行版本(N)将下一行添加到已经存在与模式空间的文本中。
$cat data
The first meeting of the Linux System
Administrator's group will be held on Tuesday.
All System Adminstrators should attend this meeting .
Thank you for your attendance
$sed '
> N
> s/System Administrator/Desktop Users/
> ' data
The first meeting of the Linux System Administrator's group will be held on Tuesday.
All System Administrator should attend this meeting.
Thank you for your attendance.
#通过使用N命令将下一行合并到找到第一个单词的行,可以探测到跨行的短语。(问题:到达数据流最后一行,N命令不能找到匹配的数据。)
多行删除命令(D),它只删除模式空间中的第一行。它将删除直至换行符的所有字符:
$cat data The first meeting of the Linux System Administrator's group will be held on Tuesday. All System Adminstrators should attend this meeting $sed ' > N > /System\nAdministrator/D > ' data Administrator's group will be held on Tuesday. All System Administrators should attend this meeting.
多行打印命令(P),只打印多行模式空间中的第一行。包括直至模式空间中换行字符的所有字符。
$cat data The first meeting of the Linux System Administrator's group will be held on Tuesday. All System Adminstrators should attend this meeting $sed ' > N > /System\nAdministrator/P > ' data The first meeting of the Linux System
模式空间是sed一个活动的缓冲区,另一个称为保留空间的缓冲区:
sed编辑器保留空间命令
命令 描述 命令 描述 h 将模式空间复制到保留空间 H 将模式空间追加到保留空间 g 将保留空间复制到模式空间 G 将保留空间追加到模式空间
$cat data2
This is the header line.
This is the first data line.
This is the second data line.
This is the last line.
$sed -n '/first/{
> h
> p
> n
> p
> g
> p
> } ' data2
This is the first data line.
This is the second data line.
This is the first data line.
#(1)当包含单词first的行出现时,h命令将行放到保留空间中。
(2)p命令打印模式空间的内容,即仍然是第一行数据。
(3)n命令检索数据流中的下一行,将其放到模式空间。
(4)p命令打印模式空间的内容,第二行数据。
(5)g命令将保留空间的内容(第一行数据)放回到模式空间,替换当前文本。
(6)p命令打印模式空间的内容,它现在回到第一行数据。