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

使用SED删除要匹配多个字段的行,sed,Sed,我有一个包含12列数据的文件。如果第5列等于“A”,第12列等于“Z”,我想删除/删除整行。这可以使用SED吗 你可以。假设您的列由空格分隔: sed -i -e '/\([^ ]* *\)\{4\}A *\([^ ]* *\)\{6\}Z/d' file -i标志用于在位编辑文件 模式[^]**匹配零个或多个非空格字符(由星号表示)(由括号中^后面的空格字符表示),后跟零个或多个空格 将此模式放在反斜杠括号之间,我们可以将其分组为单个表达式,然后可以使用反斜杠大括号重复该表达式。最初四次,然

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

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

sed -i -e '/\([^ ]* *\)\{4\}A *\([^ ]* *\)\{6\}Z/d' file
-i
标志用于在位编辑文件

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

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


希望这对你有所帮助。假设您的列由空格分隔:

sed -i -e '/\([^ ]* *\)\{4\}A *\([^ ]* *\)\{6\}Z/d' file
-i
标志用于在位编辑文件

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

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


希望这有帮助=)

您可以使用
sed
来完成这项工作,但是使用
awk
要容易得多:

awk '! ( $5 == "A" && $12 == "Z" )' input-file


您可以使用
sed
,但使用
awk
更容易:

awk '! ( $5 == "A" && $12 == "Z" )' input-file

测试如下:

> 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
>
测试如下:

> 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
>

你能用数据样本更新你的问题吗?“列”是如何定义的?您是只要求sed,还是一般使用unix工具?您能用数据样本更新您的问题吗?“列”是如何定义的?您是只要求sed,还是一般使用unix工具?