Linux / Unix:sed 命令仅打印匹配的行
我看到了很多关于如何使用 sed 执行搜索和替换等操作的示例和手册页。但是,我想匹配给定的字符串或正则模式表达式并显示在屏幕上。如何仅在类 Unix 操作系统下使用 sed 命令打印具有匹配模式的行?
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | sed |
预计阅读时间 | 2 分钟 |
- 输入流。
- 一个文件(常规文本文件)。
- 来自管道的输入(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
推荐阅读
- Sed 单行命令
- 手册页 sed