Grep 正则表达式:查找所有包含非字母字符的行?

Grep 正则表达式:查找所有包含非字母字符的行?,grep,sublimetext3,Grep,Sublimetext3,我正在使用中的正则表达式搜索工具。 我需要选择所有包含非字母字符的行(不包括空格) 例如 在上面,将选择刺猬和犰狳的全部线条,因为它们包含非字母字符。不会选择福克斯系列 这是我的密码: .*[^a-zA-Z\s] 解释 .* - Selects string [^] - Ignore everything in the square brackets a-zA-Z - Ignores all alphabet characters \s - Ignores Space 这在理论上应该是可行

我正在使用中的正则表达式搜索工具。 我需要选择所有包含非字母字符的行(不包括空格)

例如

在上面,将选择刺猬和犰狳的全部线条,因为它们包含非字母字符。不会选择福克斯系列

这是我的密码:

.*[^a-zA-Z\s]
解释

.* - Selects string
[^] - Ignore everything in the square brackets
a-zA-Z - Ignores all alphabet characters 
\s - Ignores Space
这在理论上应该是可行的,但是。它只选择冒犯角色的所有内容,但不选择后面的内容

请注意,我正在寻找一个解决方案,在崇高的查找和更换工作。如果这在Sublime中不可能实现,那么我如何调整代码,以便通过MacOS终端搜索整个文件目录

我想在候机楼做这件事会很有趣

for f in *; do '.*[^a-zA-Z\s]' 
但这也不行

另外,在Stackoverflow()上已经有关于此的问题了。但它们只处理单个字符的选择,而不是整行字符的选择

我建议使用

.*[^[:alpha:]\s].*
.*[^[:alpha:][:space:]].*
详细信息

  • *
    -除换行符以外的任何零个或多个字符,尽可能多
  • [^[:alpha:][\s]
    /
    [^[:alpha:][:space:][]
    -除字母或空格字符外的任何字符
  • *
    -除换行符以外的任何零个或多个字符,尽可能多
请参阅SublimiteText演示:

注意:您可以在MacOS终端中使用
grep

grep '[^[:alpha:][:space:]]' file
请参阅。

我建议使用

.*[^[:alpha:]\s].*
.*[^[:alpha:][:space:]].*
详细信息

  • *
    -除换行符以外的任何零个或多个字符,尽可能多
  • [^[:alpha:][\s]
    /
    [^[:alpha:][:space:][]
    -除字母或空格字符外的任何字符
  • *
    -除换行符以外的任何零个或多个字符,尽可能多
请参阅SublimiteText演示:

注意:您可以在MacOS终端中使用
grep

grep '[^[:alpha:][:space:]]' file

请参阅。

您第一次尝试的模式匹配到行尾,并将回溯到匹配
[^a-zA-Z\s]

在这个模式之后没有任何东西,所以比赛就到此为止

由于已经有了匹配项,因此可以使用

.*[^a-zA-Z\s].*

您尝试的第一个模式匹配到行尾,并将回溯到与
[^a-zA-Z\s]

在这个模式之后没有任何东西,所以比赛就到此为止

由于已经有了匹配项,因此可以使用

.*[^a-zA-Z\s].*

您可以匹配行的其余部分。
*[^a-zA-Z\s].
您可以匹配行的其余部分。
*[^a-zA-Z\s].
注意,您可以在MacOS终端中使用[^[:alpha::[:space:]和grep:
当我在文件目录上尝试时,它会显示“grep:file:没有这样的文件或目录”,谢谢您提供的任何帮助<代码>grep“[^[:alpha:][:space:][]”文件将起作用。如果您想在某些文件上运行,可以在*.u扩展名中为f使用
;执行grep“[^[:alpha:][:space:][]”“$f”;完成
。您可以使用任何其他全局模式来获取所需的文件,而不是
*。如果要递归使用
grep
在当前目录中搜索,您可以使用
grep-R'[^[:alpha:[:space:]。
。看见请注意,在很多情况下,在MacOS中使用POSIX工具时,建议安装并使用它们的GNU版本。谢谢!最后一个问题,在终端中,如果我想替换找到的行(或删除该行),我将如何做。我以为*.txt中的f应该是
;执行grep“[^[:alpha:][:space:][d'”$f”;使用代表替换的
/d
完成了
(在本例中为delete),但它只是说
grep:invalid character class
@big_smile您可以使用
sed
代表*.txt中的f;执行sed-i''/[^[:alpha:][:space:][]/d'$f';完成
-注意,由于
i
选项,它将删除内联行(FreeBSD sed中需要
'
)。在GNU
sed
中,您不需要在
-i
之后使用
'
注意,您可以在MacOS终端中使用[^[:alpha::[:space:]]和grep:
在文件目录上尝试时,它会显示“grep:file:没有这样的文件或目录”,感谢您提供的任何帮助<代码>grep“[^[:alpha:][:space:][]”文件将起作用。如果您想在某些文件上运行,可以在*.u扩展名中为f使用
;执行grep“[^[:alpha:][:space:][]”“$f”;完成
。您可以使用任何其他全局模式来获取所需的文件,而不是
*。如果要递归使用
grep
在当前目录中搜索,您可以使用
grep-R'[^[:alpha:[:space:]。
。看见请注意,在很多情况下,在MacOS中使用POSIX工具时,建议安装并使用它们的GNU版本。谢谢!最后一个问题,在终端中,如果我想替换找到的行(或删除该行),我将如何做。我以为*.txt中的f应该是
;执行grep“[^[:alpha:][:space:][d'”$f”;使用代表替换的
/d
完成了
(在本例中为delete),但它只是说
grep:invalid character class
@big_smile您可以使用
sed
代表*.txt中的f;执行sed-i''/[^[:alpha:][:space:][]/d'$f';完成
-注意,由于
i
选项,它将删除内联行(FreeBSD sed中需要
'
)。在GNU
sed
中,在
-i
之后不需要
'