NICが設定されているかどうかを検出しようとしています。 (Ubuntu
1604のため、メインコンフィギュレーションファイルは/etc/network/interfaces
になります)。Linux bash:正規表現エラーのあるgrep
私はインタフェースからのconfigureを検索する正規表現を作成し、以下のようなファイル:
^[ \t]*(auto|iface|mapping|allow-.*)[ \t]+eth0
私は直接のgrepコマンドにそれを置くと、この正規表現は動作します。しかし、私は、その後のgrepでそれを使用する変数には、この正規表現を入れて、その後のgrepは、エラーがスローされます場合:
grep: Invalid regular expression
することはあなたはそれが変数にそのプット正規表現を動作しないことを置く理由を把握するために助けてくださいことはできますか?
ありがとうございます!
私OS Sierra
端末に
[email protected]:/home/lisa# mainfn=/etc/network/interfaces
[email protected]:/home/lisa# nic_name=eth0
[email protected]:/home/lisa# pattern="^[ \t]*(auto|iface|mapping|allow-.*)[ \t]+$nic_name"
[email protected]:/home/lisa# echo $pattern
^[ \t]*(auto|iface|mapping|allow-.*)[ \t]+eth0
[email protected]:/home/lisa# grep -E "^[ \t]*(auto|iface|mapping|allow-.*)[ \t]+eth0" $mainfn
auto eth0
iface eth0 inet dhcp
[email protected]:/home/lisa# grep -E $pattern $mainfn
grep: Invalid regular expression
なぜ2番目のバージョンで引用符を削除しましたか? – melpomene
これが原因であるかどうかは分かりませんが、 'grep -E'に直接入れるときは、引用符で囲まれたパターンがありますが、' $ pattern'を使用するときは引用符が付きません。編集:私はちょうどそれを試したが、私はどちらかの構文エラーを取得していないが、 'grep -E" $ pattern "$ mainfn'を試してください – Piccolo
引用符が見つからないときは、(無効な)正規表現'^[ '\ t] * ...'という名前のファイルにあります。引用符をつけてください。 –