如何使用sed查找模式?

co7*_*000 3 unix command-line sed

如何使用合并多个过滤器sed

这是我的数据集

性别,城市,年龄
男性,伦敦32
男,曼彻斯特,32
男,牛津,64
女,牛津23
女,伦敦,33
男,牛津,45

我想确定所有包含“男性” 和“牛津”的行。这是我的方法:

sed -n '/male/,/oxford/p' file
Run Code Online (Sandbox Code Playgroud)

谢谢

Win*_*ute 5

您可以将一个块与第一个支票关联,然后将第二个支票放入其中。例如:

sed -n '/male/ { /oxford/ p; }' file
Run Code Online (Sandbox Code Playgroud)

或反转检查和操作:

sed '/male/!d; /oxford/!d' file
Run Code Online (Sandbox Code Playgroud)

但是,由于(如@Jotne所指出的)包含的行female也包含male并且您可能不希望匹配它们,因此至少应将模式修改为包含单词边界:

sed -n '/\<male\>/ { /\<oxford\>/ p; }' file
sed '/\<male\>/!d; /\<oxford\>/!d' file
Run Code Online (Sandbox Code Playgroud)

但是,由于这看起来像是逗号分隔的数据,并且检查可能并不意味着要测试某人是否上过male大学,因此最好对awk使用更严格的检查:

awk -F, '$1 == "male" && $2 == "oxford"' file
Run Code Online (Sandbox Code Playgroud)

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

sed '/^male,oxford,/!d' file
Run Code Online (Sandbox Code Playgroud)