如何使用sed查找模式?

co7000

如何使用合并多个过滤器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

这不仅检查行是否包含maleoxford检查它们是否在适当的字段中。通过使用sed可以实现相同的效果,但效果不太明显

sed '/^male,oxford,/!d' file

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章