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