如何使用 grep 搜索以连字符 (-) 开头的模式?

如何使用 grep 搜索以连字符 (-) 开头的模式?
sudo find / -name "*" | xargs grep -sn --color=auto "-j"

上述命令返回以下内容:

grep: invalid option -- 'j'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
...

如何搜索字符串-j

答案1

在您的情况下,即使您引用了它,也会"-j"将其解释grep为参数/选项,而不是搜索模式。要使其成为您要搜索的模式,只需使用-e选项:

sudo find / -name "*" | xargs grep -sn --color=auto -e "-j"

甚至:

sudo find / -name "*" | xargs grep -sn --color=auto -e -j

参数-e/选项表示下一个参数是模式。这是来自man grep

   -e PATTERN, --regexp=PATTERN
          Use  PATTERN  as  the  pattern.   This  can  be  used to specify
          multiple search patterns, or to protect a pattern beginning with
          a hyphen (-).  (-e is specified by POSIX.)

其他方法:

  • 用于--@Rinzwind他的回答,以使grep知道选项已经结束。

  • 用于\转义连字符 ( -):

    sudo find / -name "*" | xargs grep -sn --color=auto "\-j"
    

答案2

告诉它选项以以下内容结尾--

sudo find / -name "*" | xargs grep -sn --color=auto -- "-j"

结果:

Binary file /initrd.img matches
Binary file /lib/modules/2.6.24-16-server/ubuntu/media/gspcav1/gspca.ko matches
Binary file /lib/modules/2.6.24-16-server/ubuntu/sound/alsa-driver/isa/es1688/snd-es1688.ko matches
Binary file /lib/modules/2.6.24-16-server/ubuntu/sound/alsa-driver/pci/ice1712/snd-ice1712.ko matches
/lib/modules/2.6.24-16-server/modules.dep:1807:/lib/modules/2.6.24-16-server/kernel/fs/nls/nls_euc-jp.ko:
Binary file /lib/modules/2.6.24-16-server/kernel/crypto/blowfish.ko matches
Binary file /lib/modules/2.6.24-16-server/kernel/fs/nls/nls_euc-jp.ko matches
Binary file /lib/modules/2.6.24-16-server/kernel/fs/nls/nls_cp936.ko matches

答案3

您可以-使用转义字符\

$ sudo find / -name "*" | xargs grep -sn --color=auto "\-j"

您可能还想排除文件夹并仅搜索文件,请添加-type ffind

$ sudo find / -name "*" -type f | xargs grep -sn --color=auto "\-j"

此外,如果您添加-P 4xargs,它将在 4 个进程上并行执行所有操作,并且如果您拥有超过 1 个核心,则搜索速度可能会更快。

$ sudo find / -name "*" -type f | xargs -P 4 grep -sn --color=auto "\-j"

相关内容