如何在多个文件上 grep 多个字符串?

如何在多个文件上 grep 多个字符串?

我正在尝试在多个文件上 grep 多个字符串。这是在 Windows 7 x64 上,我正在使用GNUWin32 的风格

我有这个命令的 grep.bat:

grep "string1\|string2\|string3\|string4" 20*.csv > out.csv

实际上有 68 个字符串,每个字符串有 11 个字符,因此引号内的字符串长 869 个字符(包括 2 个字符分隔符)。

发生的事情是我得到了输出.csv但它所做的只是在 0 字节和我的 grep 命令的副本之间交替!啊?为什么当我明确告诉 grep 只检查匹配的文件时,它却在搜索 .bat 文件20*.csv

如果我删除> out.csv并再次运行 .bat,那么我得到的只是在命令提示符窗口中一遍又一遍重复的命令行。

答案1

这在我的 grep 中有效,它应该在任何平台上都有效。您想要做的是从文件中读取模式。以下是一个例子(请注意“-f-”,即从标准输入 (-) 读取模式):

$ man grep > grep.txt
$ man cat > cat.txt

$ cat > patterns
terminfo
full
should

(此处按 Ctrl+D)

$ cat patterns | grep -f- *.test 
cat.test:       The  full  documentation for cat is maintained as a Texinfo manual.  If
cat.test:       should give you access to the complete manual.
grep.test:              This  version  number should be included in all bug reports (see
grep.test:              should avoid both -q and -s and  should  redirect  standard  and
grep.test:       implementations support \{ instead, so portable scripts should avoid  {
grep.test:       in grep -E patterns and should use [{] to match a literal {.
grep.test:       portable scripts should avoid it.
grep.test:                     terminfo capability  does  not  apply,  when  the  chosen
grep.test:              file name wildcard expansion and therefore should not be treated
grep.test:       pcrepattern(3), terminfo(5), glob(7), regex(7).
grep.test:       The full documentation for grep is maintained as a TeXinfo manual.   If
grep.test:       should give you access to the complete manual.

答案2

在 VirtualBox VM 上的 Ubuntu 上使用 grep,并使用 VirtualBox 的共享文件夹功能访问 Windows 主机。这不是我在 GNUWin32 的 grep 中发现的第一个错误。

相关内容