2017-05-07 140 views
-1

我试图搜索任何超过200个字符但没有任何空格字符的字符串。使用grep对任何特定长度的字符串进行递归搜索无空格

我已经尝试了多个选项,但似乎没有任何工作。

例如

grep -r '.{200,}' /directory/sub-directory/

grep -r '[^\s.]{200,}' /directory/sub-directory/

+0

你尝试'grep的-E '[^] {200}'/目录/苏B-目录/'? –

+0

没有必要指定范围量词'{n,}'。如果有2500万个非空格字符序列,最好只设置一个类似于“{201}”的大于200. – sln

+0

任何投票的人都应该至少提供投票的方式。如果有任何事情需要,这将有助于改善邮政。从我身边,我尽量保持问题的清晰。 1.这是不可能的重复,我发布之前已彻底搜查。 2.我提到了我所尝试过的。我提到了我的预期结果。 – Joshi

回答

1

{n,m}符需要扩展的正则表达式(grep -E),如果你想要什么,但空间,[^ ]应该做的。而且, “超过200” 是相同的 “至少201”,所以:

grep -rEe '[^ ]{201,}' path 
+0

感谢您的解释'{n,m}'需要扩展正则表达式。所以你需要添加标志'-E' – Joshi

+0

@lkkachu - 你能给我一个提示如何在上面的语法中添加包含模式,因为我正在尝试'grep -rEe --include = *。{php}'[ ^] {201,}'路径'。但它不起作用。 – Joshi

+0

@Joshi,'--include =“* .php”'应该这样做? 'grep'支持包含/排除模式([man page](https://linux.die.net/man/1/grep)中的'*','?'和'[]')。并且外壳的大括号扩展不适用于大括号内的一个单词,因此大括号将转到'grep'。我会引用星号来防止它被当作glob,尽管你可能没有叫'--include = something'的文件,所以这次你可能会忽略它。使用'set -x'来查看所有扩展后的命令实际执行的内容。 – ilkkachu

1

grep -o -E '\S{200,}' -r /directory

  • -o将只返回匹配的字符串而不是整个线的
  • \ S将与您有任何非空白

其余已

+0

您的解决方案也很好。但喜欢由ikkachu扩展正则表达式的解释 – Joshi