如何 grep 除 + 和空格之外的所有其他字符

如何 grep 除 + 和空格之外的所有其他字符

我正在尝试使用 grep 查找包含除 + 和空格之外的任何其他字符的行。

我尝试过使用

grep [^+]

但如果我用文本文件测试它:

++++++++
++++++++
+  ++ ++

返回 3 个空行。

-c 选项返回 3,所以我认为空格和换行符可能会被排除,所以我尝试了

grep -c [^+\ ]grep -c [^+\n\ ]

两者仍然给我 3。

我也尝试过

grep -v [+]

尽管此代码适用于我的上述文本文件,但我仍然需要它来检测也包含 + 和其他字符混合的行

例如,+1+++++也应该包含在搜索中,但被排除了。

我缺少什么?

为了澄清起见,在这样的文本文件上:

++++++++
+  ++ ++
+1     +
abcd fgh
++++++++

我想让它回来

+1     +
abcd fgh

答案1

引用你的模式!这工作得很好:

$ grep '[^+]' file
+  ++ ++

如果未加引号(任何不匹配的文件)并由 shell 处理,则您的[^+]被解释为 glob 范围模式,将看到文件名与 glob 匹配。+grep

在大多数 shell 实现中,也可以使用 ^ 作为范围否定字符,例如 [^[:space:]]。 (通过

如果您还想排除空格,请使用[^+ ]以下模式:

$ grep '[^+ ]' file2
+1     +
abcd fgh

您可以使用以下命令检查 shell 如何解释命令set -x

set -x
grep [^+] file

相关内容