我正在尝试使用 GNU Grep(为 Win32 目标编译的 grep)为 windows7 创建一个 .bat 文件。我在使用 | 的表达式的语法上遇到问题(或),因为 DOS 命令认为我将其用作管道/重定向。这是一个示例输入 foo.txt:
aaa
bbb
ccc
aaa bbb ccc
所以我尝试了一个简单的测试:
grep aaa foo.txt
结果:
aaa
aaa bbb ccc
到目前为止,还不错。但我真的需要提取 aaa 或 bbb,所以我使用这个表达式: (aaa|bbb) 例如:
grep (aaa|bbb)
给我:
'bbb)' is not recognized as an internal or external command,
operable program or batch file.
我尝试了各种引用,但还没有找到正确的组合。我需要保护字符串不受 DOS 解释器的影响,但它仍然对 grep 有用。我阅读了手册页和网络文档,但似乎没有任何内容适合我正在尝试做的事情。
有谁知道如何做到这一点?谢谢。
最佳答案
需要引号并使用 \
转义管道:
grep "aaa\|bbb" foo.txt
$ cat foo.txt
aaa
bbb
ccc
aaa bbb ccc
$ grep "aaa\|bbb" foo.txt
aaa
bbb
aaa bbb ccc
关于regex - 来自 dos 窗口的带有 "or"的 grep 命令行 (gnu grep),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13381783/