如何使用合并多个过滤器sed
?
这是我的数据集
性别,城市,年龄 男,伦敦,32 男,曼彻斯特,32 男,牛津,64 女,牛津,23 女,伦敦,33 男,牛津,45
我想确定所有包含“男性”和“牛津”的行。这是我的方法:
sed -n '/male/,/oxford/p' file
谢谢
您可以将一个块与第一个支票相关联,然后将第二个支票放入其中。例如:
sed -n '/male/ { /oxford/ p; }' file
或反转检查和操作:
sed '/male/!d; /oxford/!d' file
但是,由于(如@Jotne所指出的)包含的行female
也包含male
并且您可能不想匹配它们,因此至少应将模式修改为包含单词边界:
sed -n '/\<male\>/ { /\<oxford\>/ p; }' file
sed '/\<male\>/!d; /\<oxford\>/!d' file
但是,由于这看起来像是逗号分隔的数据,并且检查可能并不意味着要测试某人是否上过male
大学,因此最好对awk使用更严格的检查:
awk -F, '$1 == "male" && $2 == "oxford"' file
这不仅检查行是否包含male
,oxford
还检查它们是否在适当的字段中。通过使用sed可以实现相同的效果,但效果不太明显
sed '/^male,oxford,/!d' file
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句