如何组合grep命令筛选以NVO开头且包含,B,的文件行
解决方案
你可以通过以下几种简单方式实现,不需要中间临时文件:
方法1:单条grep正则匹配(最简洁)
直接在单个正则里同时匹配两个条件:行首是NVO,,后面任意位置出现,B,,命令如下:
grep '^NVO,.*,B,' file_name.txt
正则说明:
^NVO,匹配行首的NVO,.*匹配两个条件中间的任意个任意字符,B,匹配目标子串
如果要使用扩展正则写法,也可以加-E参数,效果完全一致:
grep -E '^NVO,.*,B,' file_name.txt
方法2:管道级联grep(可读性更高,适合多复杂条件)
你之前的管道写法顺序错了,正确的写法是先读取文件筛选第一个条件,再把结果传给第二个grep筛选第二个条件:
grep '^NVO,' file_name.txt | grep ',B,'
之前写法失败的原因
- 用
|的写法逻辑错误:|在正则里是或逻辑,会匹配满足任意一个条件的行,不是同时满足;且默认grep使用基础正则,|不会被识别为正则元字符,需要加-E参数才会生效。 - 管道写法顺序错误:第二个grep后加了文件名参数,会直接读取文件内容,忽略前一个grep通过管道传递的结果,相当于只执行了第二个筛选行首NVO,的逻辑。
内容的提问来源于stack exchange,提问作者yaodav
相关产品推荐
相关产品推荐

