在Unix系统中如何使用grep筛选空行及指定特殊字符的行?
如何用grep匹配空行和含指定特殊字符的行?
嗨,我来帮你搞定这个问题~你之前的grep命令只针对特殊字符做了匹配,但没包含空行的规则,咱们只需要把两个匹配条件组合起来就能实现需求啦!
核心思路
要同时匹配两种情况:
- 空行:在正则表达式里,空行可以用
^$表示(^匹配行首,$匹配行尾,中间没有任何字符就是空行) - 含特殊字符的行:你需要匹配的
?#!%这些字符,在grep的字符集[]里可以直接写(如果要匹配字面意义的*,需要转义成\*,因为*在正则里是量词)
可行命令
方式1:使用扩展正则(推荐)
用-E选项启用扩展正则表达式,这样可以直接用|表示“或”的逻辑:
grep -n -E '^$|[?#!%]' file
参数说明:
-n:显示匹配行的行号,方便定位-E:启用扩展正则,支持|这样的逻辑或语法^$|[?#!%]:匹配空行 或 包含?/#/!/%的行
方式2:使用基本正则
如果不想用-E,可以把|转义成\|,用基本正则实现:
grep -n '^$\|[?#!%]' file
额外说明
如果你的需求里确实要包含*这个特殊字符(看你原命令里写了*),只需要把它加入字符集并转义:
grep -n -E '^$|[?#!%*]' file
测试示例
假设你的file内容如下:
普通文本行 # 这是一行带#的注释 测试行? 带!的行 %特殊符号行
运行命令后会输出:
2:# 这是一行带#的注释 3: 4:测试行? 5:带!的行 6:%特殊符号行
完美匹配到了空行和所有含指定特殊字符的行~
内容的提问来源于stack exchange,提问作者semi abbasi
相关产品推荐
相关产品推荐

