GNU grep с `-file-name` выдает ошибку` ile-name: такого файла или каталога нет` - PullRequest
2 голосов
/ 23 марта 2011

Когда я пытался найти шаблон '-file-name', я получал странные сообщения об ошибках

jaewan@lymose1:~$ grep -file-name README.txt 
grep: ile-name: No such file or directory
jaewan@lymose1:~$ grep \-file-name README.txt 
grep: ile-name: No such file or directory
jaewan@lymose1:~$ grep '-file-name' README.txt 
grep: ile-name: No such file or directory
jaewan@lymose1:~$ grep '\-file-name' README.txt 
-- works well

Я думаю, что grep интерпретирует '-file-name' как -f ile-name, если я не использую '-file-name'. Я читал документы о grep и регулярных выражениях, но не смог найти причину. На первый взгляд, на мой взгляд, также должен работать и -file-name.

Это ошибка GNU grep? или общий стиль linux?

GNU grep версия 2.5.4

Ответы [ 2 ]

4 голосов
/ 23 марта 2011

Это стандартная обработка аргументов POSIX.Два способа обойти это:

grep -e -file-name README.txt
grep -- -file-name README.txt

Первый помечает следующий аргумент как регулярное выражение, даже если он выглядит как опция;вторая отключает синтаксический анализ параметров, поэтому все, что следует за --, принимается в качестве аргумента, а не параметра.

2 голосов
/ 23 марта 2011

Используйте -e перед шаблоном, чтобы предотвратить его интерпретацию как опцию.

   -e PATTERN, --regexp=PATTERN
          Use PATTERN as the pattern; useful to protect patterns beginning
          with -.

Итак, ваш код должен выглядеть так:

grep -e -file-name README.txt 

Ваши попытки выходадостиг оболочки, а не grep, поэтому вы не видели никаких изменений в поведении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...