test.txt ファイルの内容は次のとおりです。
ls -a
cmake --verbose
verbose
grep
このファイルを見て、「--」で始まる単語(例:「--verbose」)だけを探したいと思います。
ただし、次のパターンをパラメータとして使用すると機能grep
しません。
$ cat testing.txt | grep --
Usage: grep [OPTION]... PATTERN
[FILE]... Try 'grep --help' for more information.
$ cat testing.txt | grep -
ls -a
cmake --verbose
$ cat testing.txt | grep '--v'
grep (GNU grep) 3.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
$ cat testing.txt | grep ver
cmake --verbose
verbose
$ cat testing.txt | grep '-ver'
ls -a
grep
aで始まるすべてのパラメータが--
オプションだと思いますか? grepが「--」で始まるパターン(ファイルから)を取得できるようにするには、この問題を回避するにはどうすればよいですか?- 最後の試みは「-ver」パターンを使用して行われたため、
grep
そのパターンはオプションとは見なされませんでしたが、grep
「-ver」パターンが含まれているにもかかわらず、ファイルの「--verbose」単語と一致しませんでした。この動作の原因は何ですか?
ベストアンサー1
この文字列は、--
コマンドラインに表示されるときにほとんどのユーティリティに特別です。それは信号を送るオプション終了コマンドライン引数パーサーに。たとえば、現在のディレクトリから呼び出されたファイルをrm -- -f
削除するためにダッシュで始まるファイル名を渡したい場合に使用されます。-f
--
パターンとして使用するには、ユーティリティにパターンであることをgrep
明示的に教えてください。
grep -e --
オプションは、検索したいパターンである-e
オプション引数を受け入れます。grep
grep
また、使用することができます
grep -- --
ここでgrep
2つ目は、最初のものがオプションになることができない--
としてモードと呼ばれていました。--
ls -a
ファイルの行にが含まれていないため、最後のパイプが返されますr
。このコマンドは、「()と一致しないすべての行抽出」grep -ver
で作成することもできます。grep -v -e r
-v
r
-e r