我正在尝试使用 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