首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用SED删除具有多个要匹配的字段的行

使用SED删除具有多个要匹配的字段的行
EN

Stack Overflow用户
提问于 2012-10-09 03:11:33
回答 3查看 973关注 0票数 1

我有一个包含12列数据的文件。如果第5列等于"A“,第12列等于"Z”,我想删除/移除整行。这可以使用SED吗?

EN

回答 3

Stack Overflow用户

发布于 2012-10-09 03:23:26

你可以的。假设您的列由空格分隔:

代码语言:javascript
代码运行次数:0
运行
复制
sed -i -e '/\([^ ]* *\)\{4\}A *\([^ ]* *\)\{6\}Z/d' file

-i标志用于就地编辑文件。

模式[^ ]* *匹配零个或多个(用星号表示)不是空格的字符(由括号中^后面的空格字符表示),后面跟零个或多个空格。

将此模式放在反斜杠括号中,我们可以将其分组为一个表达式,然后我们可以使用反斜杠括号重复该表达式。最初匹配四次,然后匹配A后跟空格,然后模式再次重复六次,然后是Z

希望这会有帮助=)

票数 2
EN

Stack Overflow用户

发布于 2012-10-09 03:38:14

使用sed可以做到这一点,但是使用awk要容易得多

代码语言:javascript
代码运行次数:0
运行
复制
awk '! ( $5 == "A" && $12 == "Z" )' input-file

代码语言:javascript
代码运行次数:0
运行
复制
awk '$5 != "A" || $12 != "Z"' input-file
票数 2
EN

Stack Overflow用户

发布于 2012-10-09 15:38:39

代码语言:javascript
代码运行次数:0
运行
复制
perl -F -ane 'print unless($F[4] eq "A" and $F[11] eq "Z") your_file

测试如下:

代码语言:javascript
代码运行次数:0
运行
复制
> cat temp
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 A 6 7 8 9 10 11 Z
> perl -F -ane 'print unless($F[4] eq "A" and $F[11] eq "Z")' temp
1 2 3 4 5 6 7 8 9 10 11 12
>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12787958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档