我有一个文件,其中有许多行由#
或:
分隔,我想删除所有没有3磅4冒号的行。这就是我试过的:
awk '! /^\#{3}\:{4}+$/' "$file"
编辑以提供样本行:
958#40#6#020104
Thanhachammet,Chendrit:D500:5833:8.40:12.10
This is # bad : line
我不想采取像1和2这样的所有行,并将它们发送到一个文件,不包括像#3这样的所有行。一些
答案 0 :(得分:3)
这个传递给grep的扩展正则表达式应该这样做:
grep -E '(#.*#.*#|:.*:.*:.*:)' file.txt
在Ubuntu 12.04上:
$ cat file.txt
958#40#6#020104
Thanhachammet,Chendrit:D500:5833:8.40:12.10
This is # bad : line
$ grep -E '(#.*#.*#|:.*:.*:.*:)' file.txt
958#40#6#020104
Thanhachammet,Chendrit:D500:5833:8.40:12.10
$
如果您需要匹配的内容超过3或4 #
或:
,那么您可以这样做:
grep -E '((#.*){2}#|(:.*){3}:)' file.txt
awk '/(#.*#.*#|:.*:.*:.*:)/' file.txt
This debugging tool is really handy when debugging regular expressions.
答案 1 :(得分:2)
awk 'split($0, a, "#") == 4 || split($0, a, ":") == 5' file.txt
答案 2 :(得分:0)
使用grep
的{{1}}(简称--invert-match
):
-v