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)
谢谢
您可以将一个块与第一个支票关联,然后将第二个支票放入其中。例如:
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)
这不仅检查行是否包含male,oxford还检查它们是否在适当的字段中。通过使用sed可以实现相同的效果,但不太复杂
sed '/^male,oxford,/!d' file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27155 次 |
| 最近记录: |