Linux/Unix:sed命令仅打印匹配行

时间:2020-01-09 10:46:07  来源:igfitidea点击:

如何使用sed进行搜索和替换等操作。
但是,如何匹配给定的字符串或者正则模式表达式并在屏幕上显示。
如何仅在Unix之类的操作系统下使用sed命令打印具有匹配模式的行?

Sed是用于Unix之类的操作系统的流编辑器。它可以对以下内容执行基本的文本转换:

  • 输入流。
  • 一个文件(普通文本文件)。
  • 来自管道的输入(command1 | sed -e expr1 | command2)。

sed打印语法和示例

使用以下语法:

sed '/word/p' input
sed '/regexp/p' input
sed -n '/regex/p' /path/to/file
sed -n '/regexp/p' /path/to/file | less
sed -n -e '/regexp/p' input > output
## gnu/sed - update file with -i option ###
sed -i -n -e '/regexp/p' input

在此示例中,打印或者显示/etc/passwd文件中的所有匹配行:

sed -n '/root/p' /etc/passwd

输出示例:

root:x:0:0:root:/root:/usr/local/sbin/nologin_corp

除非明确要求,否则-n选项要求sed不显示正则表达式或者彭定康。
尝试删除-n选项,您将了解其中的区别:

sed '/root/p' /etc/passwd

您可以使用行地址打印行。
在此示例中,输出第二行:

sed '2p' /etc/passwd

p命令后面带有2。
数字2表示第二行。
您可以告诉sed仅在特定的一行或者多行上执行打印。
在此示例中,打印1至5行:

sed '1,5p' /etc/passwd

p命令之前是行有效地址1,5(以逗号分隔)。
您还可以使用两个正则表达式进行打印,语法为:

sed -n -e '/WORD-1/,/WORD-2/p' input.file
sed -n -e '/regexpA/,/regexpB/p' input.file

在此示例中,打印一个数据块,该数据块以包含BROWN的行开始,以包含GREEN的行结束:

sed -n -e '/BROWN/,/GREEN/p' colours.txt

下面的示例将从包含GREEN的行到文件末尾打印文件的一部分:

sed -n '/GREEN/,$p' colours.txt