如果我想打印出包含各种随机线条的文件中的线条,并在其中洒满星号(也就是说它们可以在任何地方,开始,结束,间隔等)。我怎样才能最简洁地打印出线条包含6个或更少(总)星号的星号?我已经尝试了一切,但找不到一个简洁的解决方案。
******
a*b*c*.****
abc
1234** **~}{ *
(*)
**** abc****
(注意:上面的一些行以空格结尾)
从上面的示例文件中,我想要打印出所有行,包括空白行(第5行),但最后一行除外,因为它总共有8个星号。
到目前为止我尝试的所有内容似乎都无法计算每行星号的总数 - 我尝试使用sed删除所有字符减去星号,然后使用grep打印符合条件的行,但是这种方法太长了。
答案 0 :(得分:3)
grep -v '\(\*[^*]*\)\{7\}' file.txt
括号中的\*[^*]*
位表示“星号,后跟任意数量的非星号字符”,\{7\}
表示此模式中的七种。 -v
表示过滤掉匹配的行而不是打印它们。
您也可以使用egrep
命令或grep -E
不必使用尽可能多的反斜杠:
egrep -v '(\*[^*]*){7}' file.txt
# or
grep -vE '(\*[^*]*){7}' file.txt