ファイル内の-X
のようにダッシュ/ハイフンで始まる文字列をgrepしたいのですが、コマンドライン引数としてこれを混乱させています。
私はもう試した:
grep "-X"
grep \-X
grep '-X'
http://tldp.org/LDP/abs/html/special-chars.html#DASHREF に記載されているように、ダッシュはBashの特殊文字です。したがって、これを1回エスケープすると、Bashを過ぎてしまいますが、Grepには(オプションを提供することによって)ダッシュするという意味があります。
したがって、あなたは本当にそれを2回エスケープする必要があります(他の言及された答えを使用したくない場合)。以下は動作するはずです
grep \\-X
grep '\-X'
grep "\-X"
Bashが引数をスクリプト/プログラムに渡す方法を試す1つの方法は、すべての引数をエコーする.shスクリプトを作成することです。 echo-args.shと呼ばれるスクリプトを使用して、時々再生します。含まれているものは次のとおりです。
echo $*
私はそれを次のように呼び出します:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
あなたはアイデアを得る。
grep -e -X
がトリックを行います。
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
Solarisマシンにはアクセスできませんが、Linuxではgrep "\-X"
が機能します。
既に説明したように、正しい方法は、「-」を使用して引数の処理を停止することです。これは、ツールのソースでgetopt_long(getopt.hのGNU C関数)を使用しているためです。
これが、他のコマンドラインツールで同じ現象に気付く理由です。それらのほとんどはGNUツールであり、この呼び出しを使用するため、同じ動作を示します。
補足として-getopt_longは、-rloと--really_long_optionの間のクールな選択と、インタープリターの引数の組み合わせを提供します。
1つの引数をgrepに渡す別のユーティリティを使用している場合は、次を使用できます。
'[-]X'
nawkを使用できます
$ nawk '/-X/{print}' file