如何在UNIX中打印包含六个或更少星号的文件中的行

时间:2013-11-28 15:16:22

标签: regex unix filter

如果我想打印出包含各种随机线条的文件中的线条,并在其中洒满星号(也就是说它们可以在任何地方,开始,结束,间隔等)。我怎样才能最简洁地打印出线条包含6个或更少(总)星号的星号?我已经尝试了一切,但找不到一个简洁的解决方案。

******   
a*b*c*.****   
abc  
1234** **~}{      *  

(*)  
   ****  abc****  

(注意:上面的一些行以空格结尾)

从上面的示例文件中,我想要打印出所有行,包括空白行(第5行),但最后一行除外,因为它总共有8个星号。

到目前为止我尝试的所有内容似乎都无法计算每行星号的总数 - 我尝试使用sed删除所有字符减去星号,然后使用grep打印符合条件的行,但是这种方法太长了。

1 个答案:

答案 0 :(得分:3)

grep -v '\(\*[^*]*\)\{7\}' file.txt

括号中的\*[^*]*位表示“星号,后跟任意数量的非星号字符”,\{7\}表示此模式中的七种。 -v表示过滤掉匹配的行而不是打印它们。

您也可以使用egrep命令或grep -E不必使用尽可能多的反斜杠:

egrep -v '(\*[^*]*){7}' file.txt
# or
grep -vE '(\*[^*]*){7}' file.txt