この質問 を読んで、GNU grep
には引数を期待する-X
オプションがあることを発見しました。不思議なことに、 manページにもinfoページにもありません。
ソースコードを見ると、そのコメントがあります --help
出力の真ん中 :
/* -X is deliberately undocumented. */
さらに見ると、-X matcher
オプション 正規表現に使用されるエンジンを設定する 、matcher
は のいずれかgrep
、egrep
、fgrep
、awk
、gawk
、posixawk
およびPerl
(バージョン2.25以降)。
これらの値の一部は、既存のオプションとまったく同じです(つまり、grep -G
、grep -E
、grep -F
、およびgrep -P
)。一方、3つのawk
バリアントには対応するオプションがありません。
特にawk
正規表現エンジンの1つで、このオプションの実際の目的が誰か知っていますか?なぜそれが故意に文書化されていないのか誰かが教えてもらえますか?
その目的は、GNU grep
で実装されたさまざまなマッチャー、特にテスト目的でおそらく他の方法では利用できないAWKマッチャーへのアクセスを提供することです( gawk
およびposixawk
マッチャーの追加について説明している bug 16481 を参照してください)。
ただし、現在はバグが多いため、これが ドキュメント化されていないことがドキュメント化されている理由です :
2005年1月27日木曜日の04:06:04 PM -0500に、チャールズレバートは次のように書いています。
>「-X」オプション、特に「awk」マッチャーでの使用
>( "-X awk")は文書化されていません。文書化しないでください。
-X awk以外の新機能はありません。
そして、awk regexpsの実装は完璧ではないと思います。
新しいGNU正規表現は、AWKスタイルの構文を設定するいくつかの手段を備えていますが、gawkはそれを直接使用せず、最初に正規表現を解析します。
特に、awkの正規表現では、エスケープシーケンス\ NNNを使用できます。NNNは8進値です。/\ 040 /はスペースをつなぎます。 grep -X awkはこれをサポートしていないようです。
Regex.cはこれらのエスケープシーケンスをサポートしていないと思います。
この機能を文書化(およびサポート)することを決定する前に、正規表現がawk正規表現と完全に互換性があることを確認する必要があります。
困るほどの価値はないと思います。
ステパン
follow-up はコメントの追加を要求し、-X
オプションの背景をもう少し提供しました:
私自身の傾向は、-Xを完全に削除することを提案することです。私はそれが主にテストの目的で元の作者によって追加されたと思います。それがとどまるなら、少なくともこのようなコメントを追加してください。
/* -X is undocumented on purpose. */
解決された問題の今後の議論を避けるため。
アーノルド
これは その後すぐにステパンが行いました です。