正規表現を使用してコマンドラインから egrep を使用すると機能せず、タイトルにエラーが表示されます。
egrep -rnw /var/log/usres/([a-z]+).([a-z]+)\/([a-z]+).conf/user.settings -e "pattern"
私は正規表現を検証しましたhttps://regex101.com/r/pL5pW4/1shellcheck.net を使用しましたが、どちらも問題なしと表示されます。私がやろうとしているのは、次のように特定のフォルダーを一致させることです。
egrep -rnw /var/log/users/sd.dfr/test.conf/user.settings, so the
この例の「sd.dfr」と「test」は、正規表現の目的です。これらの任意の組み合わせをフォルダー パスに一致させます。引用符、エスケープ、二重引用符を試しました。なぜこれが機能しないのでしょうか。
答え1
grep
正規表現の検索内容ファイルを検索しません名前が一致するファイル正規表現です。(find
そのためには を使用します。)さらに、grepがそれらを見る前に、あなたが提供するファイル/ディレクトリ名のリストはシェルによって解釈されます。シェルは、 グロブ正規表現ではありません。
シェル グロブは正規表現ほど正確ではありませんが、次のようにすれば十分に機能する可能性があります。
egrep -rnw /var/log/users/*.*/*.conf/user.settings -e "pattern"
あるいは、もっと良いのは、egrep
非推奨であるためです:
grep -Ernw /var/log/users/*.*/*.conf/user.settings -e "pattern"