使用sed的p命令,你可以打印当前模式空间中的行。
你也许会好奇为什么需要p命令,默认的sed会在执行完命令后输出模式空间的缓存。
其实这是有原因的,等会你将看到,这个命令将允许你专门控制打印到标准输出。通常来说,你应该使用-n选项来抑制作为标准sed流一部分的默认输出。否则,当执行p命令的时候,该行会输出两次。
接下来的例子employee.txt文件中的行将输出两次:
1 2 3 4 5 6 |
|
打印每行一次(作用和’cat expolyee.txt’相同):
1 2 3 |
|
特定的地址范围
如果你在使用sed命令前不指定地址范围,那么默认会匹配所有的行,接下来的一些例子是在使用sed命令前指定一个范围
只打印第二行
1 2 |
|
打印1到2行
1 2 3 |
|
打印第2行到结尾($表示到最后一行)
1
|
|
修改地址范围
你可以通过逗号、+和~修改地址范围。
- ,在上面的例子中,我们看到了使用逗号(,)修改地址范围规范的一部分。它的意义很明了:n,m显示n到m的值。
- +号可以和逗号结合,指定的是行数而不是绝对的行号。例如,n,+m意味着从n开始往后m行。
- ~号也可用于修好地址范围。它的特殊的意思表示跳过命令之间的行。例如,地址范围n~m表面sed从第n行开始并且每次跳过m行。
- 1~2 匹配1,3,5,7,等。
- 2~2 匹配 2,4,6,8,等。
- 1~3 匹配 1,4,7,10,等。
- 2~3 匹配 2,5,8,11,等。
只打印奇数行:
1 2 3 4 |
|
词匹配
正如你可以指定一定数量地址(或者地址范围),你也可以指定一个特定的词(或者词的范围)匹配,在接下来的例子中将会演示。
打印匹配有“Jane”的行:
1 2 |
|
打印从第一行到第四行匹配“Jason”的行:
1 2 3 4 |
|
注:如果这里再1到4行没有匹配到”Jason”,那么这条命令会打印出包含“Jason”之后的行。
打印从第一行到最后一行匹配”Raj”的行:
1 2 3 4 |
|
打印匹配行”Raj”直到匹配到”Jane”行:
1 2 3 4 |
|
注:如果没有匹配到Jane,则打印“Raj“行到最后一行
打印匹配“Jason”的行并且打印“Jason”行后的两行:
1 2 3 4 |
|
–EOF–