Regex 使用grep查找线条中的特定图案

Regex 使用grep查找线条中的特定图案,regex,bash,shell,grep,Regex,Bash,Shell,Grep,我试图在BourneShell脚本中使用grep在文本文件中查找特定模式 样式为:word1 word2 word3 我想打印所有不是那种风格的东西。到目前为止,我使用 grep -e '[[:space:]]\{2,\}' somefile 在单词之间找到2个以上的空格,但我不知道如何使其保持每行3个单词的限制 我的另一种方法是计算每行有多少个单词,如果超过3个,则打印该行。或者检查第三个单词末尾是否有空白,但我不确定该如何格式化。我不确定这是否是您想要的,但这里: 我们匹配: 任意数量的

我试图在BourneShell脚本中使用grep在文本文件中查找特定模式

样式为:
word1 word2 word3

我想打印所有不是那种风格的东西。到目前为止,我使用

grep -e '[[:space:]]\{2,\}' somefile
在单词之间找到2个以上的空格,但我不知道如何使其保持每行3个单词的限制


我的另一种方法是计算每行有多少个单词,如果超过3个,则打印该行。或者检查第三个单词末尾是否有空白,但我不确定该如何格式化。

我不确定这是否是您想要的,但这里:

我们匹配:

  • 任意数量的非空格:
    [^[:space:]\+
  • 直到我们有空位
  • 重复3次
  • 所有这些都应该放在一行:
    ^…$
  • 我们用
    -v
    选项来否定这一点

嘿,这很好用!我该如何让输出在单独的行中输出,而不是一次输出?我在bourne shell脚本中使用了echo,我不确定我是否理解。你是在问如何让
echo
打印出多行吗?@thunderfox听起来像是在做
g=$(grep的东西);echo$g
。在某些情况下,将输出捕获到变量中是有意义的,但在无法访问代码和/或原因的情况下,这听起来像是另一种情况。如果它是合法的,适当的引用应该会有所帮助<代码>用双引号回显“$g”。否则,
grep
本身就可以打印匹配项。grep的目的是查找包含特定模式的行。也许你可以更仔细地思考下一个问题的标题?迂腐的注释:你不太可能实际使用Bourne shell,而是一些名为
sh
的兼容POSIX的shell,它具有比原始Bourne shell更多的功能。
]$ cat input
one

one two
one two three
one two three four

]$ grep -v -e "^[^[:space:]]\+ [^[:space:]]\+ [^[:space:]]\+$" input
one

one two
one two three four