コメントアウトされた行を無視するか、1つの文字列だけを一致させ、他の文字列は一致しない方法について多くのガイドを見つけましたが、まだ必要なものが見つかりませんでした。文字列 "indexes"(大文字と小文字を区別しない、apacheconf)を含むが、前に "#"を持たないファイルを再帰的に検索したいと思います。
以下と一致する必要があります。
Options Indexes
Options +Indexes
Options Indexes MultiViews
Options Indexes # Comment
Options Indexes # Indexes
しかし、これではありません:
Options MultiViews # Indexes
# Indexes yadayada Indexes
私のフォームのスクリプトでこれを使用します。
if grep -re "[^#]*ndexes" $DIR1/httpd.conf $DIR2/http; then
echo Do not use Indexes
fi
上記は私の努力の一つですが、うまくいきません。
答え1
次の入力が与えられた場合:
Options Indexes
Options +Indexes
Options Indexes MultiViews
Options Indexes # Comment
Options Indexes # Indexes
Options MultiViews # Indexes
# Indexes yadayada Indexes
これはうまくいくようです:
$ grep '^[^#]*Indexes' input
Options Indexes
Options +Indexes
Options Indexes MultiViews
Options Indexes # Comment
Options Indexes # Indexes
$ grep -v '^[^#]*Indexes' input
Options MultiViews # Indexes
# Indexes yadayada Indexes
正規表現分析:
^
- 行の始まり[^#]*
- Octothorpe以外の文字が0個以上含まれています。Indexes
- リテラル文字列Indexes
スクリプトのコンテキストに入れます。
if grep -rl -- '^[^#]*Indexes' "$DIR1/httpd.conf" "$DIR2/http"; then
echo "The above-listed files use an 'Indexes' directive."
fi