在特定的column bash中删除具有特定字符串的行

时间:2018-06-26 14:32:30

标签: bash

测试文件:

1|2|3|4|Test|6
1|2|3|4|Test|6
1|2|3|4|5|6
1|2|3|4|Test|6
1|Test|3|4|5|6
1|2|3|4|5|6
1|2|3|4|Test|6
1|2|3|4|5|6

输出应在删除后:

1|2|3|4|5|6
1|Test|3|4|5|6
1|2|3|4|5|6
1|2|3|4|5|6

4 个答案:

答案 0 :(得分:1)

使用awk

awk -F“ |” '$ 5!=“测试” {print $ 0}'测试文件

答案 1 :(得分:1)

尝试-

awk -F"|" '$5 ~ /[[:digit:]]/' file.txt
1|2|3|4|5|6
1|Test|3|4|5|6
1|2|3|4|5|6
1|2|3|4|5|6
  

说明-

  • F'|':设置“ |”作为字段分隔符
  • $5 ~ /[[:digit:]]/:检查第5列是否包含数字。

答案 2 :(得分:0)

sed -E '/([^|]*\|){4}Test/d' testfile
1|2|3|4|5|6
1|Test|3|4|5|6
1|2|3|4|5|6
1|2|3|4|5|6

答案 3 :(得分:0)

您也可以直接将grep与合适的正则表达式一起使用:

grep -v -e '^\([^\|]*[\|]\)\{4\}Test[\|]' testfile

在模式[^\|]*中,表示|以外的任何字符。匹配任意次数(即,匹配不带“ |”的字符串)。其后跟[\|],它告诉grep匹配后面的“ |”。因此,总共[^\|]*[\|]匹配“ ... |”之类的东西。该表达式用\( \)括起来,后跟\{4\}表示重复4次。之后,出现所需的字符串Test,后跟[\|],这意味着匹配单个字符“ |”。最后,在正则表达式开始处的字符^选择以以下模式开头的行,而-v打印出不匹配的行。