sed高级命令:
一、模式空间(pattern space):
N;追加下一行(把文件两行看作一行),多行Next(N)命令通过读取当前行的下一行,并把两行组成一行来进行接下来的处理。
$!N;使用N的时候加一个判断,即当前行为最后一行时,不读取下一行的内容:
n;读取下一行(读取文件的偶数行),用下一个命令处理读取的行。
P;打印模式空间直到第一个"\n"为止的所有内容(打印模式空间一部分)。
p;打印模式空间的所有内容。
D;删除模式空间中第一行的内容,如果模式空间中内容不为空,D不会导致读入新行,相反它会回到最初的编辑命令,重要应用在模式空间剩余的内容上。
d;删除模式空间中所有的内容。
例:sed 'n;d' 4.log #打印单数行;
sed -n 'n;p' 4.log #打印偶数行
二、保留空间(hold space):
保留空间用于保存模式空间的内容,模式空间的内容可以复制到保留空间,同样保留空间的内容也可以复制回模式空间。
保存(hold) h/H 将模式空间的内容复制或者追加到保留空间;
取回(get) g/G 将保留空间的内容复制或者追加到模式空间;
交换(exchange) x 交换模式空间和保留空间的内容;
例:cat hehe
1
2
3
4
5
sed -n '1,3p;h;x' -i hehe #模式空间打印1到3行的数,h把模式空间的数复制到保留空间,x交换模式空间和保留空间的内容;
1
2
3
sed 'h;G' -i hehe #h将模式空间的内容都复制到保留空间,G将保留空间的内容追加到模式空间;
1
1
2
2
3
3
三、高级流程控制命令:
b/t两个命令可以用于跳转,我们在脚本中用命令":label"来创建标签后,然后就可以跳转过来,这样可以行程do{}while()式的循环结构。程序语言中一般都会支持顺序/条件/循环等流程控制。所以sed已经具有了一般程序语言的雏形了,可以做一些很复杂的事情。
阅读(886) | 评论(0) | 转发(0) |