Как использовать 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?

5
задан 5 March 2018 в 15:52

3 ответа

В Вашем случае "-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 к hnow, что законченные опции.

  • использовать \ выйти из дефиса (-):

    sudo find / -name "*" | xargs grep -sn --color=auto "\-j"
    
5
ответ дан 5 March 2018 в 15:52

Скажите это что опции, законченные --:

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
2
ответ дан 5 March 2018 в 15:52

Можно выйти - символ с помощью \

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

, Также можно хотеть исключить папки и искать только файлы, добавить -type f к find:

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

Также, если Вы добавляете -P 4 к xargs, это будет параллельно всему выполнению на 4 процессах, и поиск может быть сделан быстрее, если у Вас есть больше чем 1 ядро.

$ sudo find / -name "*" -type f | xargs -P 4 grep -sn --color=auto "\-j"
1
ответ дан 5 March 2018 в 15:52

Другие вопросы по тегам:

Похожие вопросы: