引用符内の grep 引用符

引用符内の grep 引用符

はい.txt

alias znm="base64"
alias asu="sed 's/.\{4\}/&™/g'"
alias mmk="sed 's/\(.\{4\}\)\™/\1/g'"
alias mmk="sed 's/\(.\{8\}\)\™/\1/g'"

希望の出力:

alias asu="sed 's/.\{4\}/&™/g'"

しかし、これを試してみるとエラーが発生します。

grep -wo "alias asu="sed 's/.\{4\}/&™/g'"" example.txt

正しいことは何ですか?

ベストアンサー1

grep -Fx -f /dev/stdin example.txt <<'PATTERN'
alias asu="sed 's/.\{4\}/&™/g'"
PATTERN

これにより、引用符や正規表現の文字に関する問題を回避し、パターンをそのままgrep標準入力に渡します。このユーティリティは標準入力からパターンを読み込みます。これを使用するようにgrep要求したからです(Androidでは代わりに使用できます)。-f /dev/stdin-f /dev/fd/0

-Fパターンを正規表現ではなく文字列として使用し、パターンと-x正確に一致する行のみが一致することを確認します(パターンが行の先頭と末尾に固定されているかのように)。

特定のエイリアスがファイルにあるかどうかをテストするには、次のようにします。

if grep -q -Fx -f /dev/stdin example.txt; then
    echo the alias is there
else
    echo the alias is not there
fi <<'PATTERN'
alias asu="sed 's/.\{4\}/&™/g'"
PATTERN

注文、

grep -wo "alias asu="sed 's/.\{4\}/&™/g'"" example.txt

実際にはgrepパターンを使用して呼び出されます。二つファイル名:

  • "alias asu="sedパターンです(実際には1つを使用しないので正規表現です-F)。
  • 's/.\{4\}/&™/g'""シェルが引用符で囲まれていないスペースから文字列を区切るため、最初のファイル名です。
  • example.txt2番目のファイル名。

明らかに、すべての特殊文字と引用符を引用できますが、スキーマをまったく変更する必要はないので、ここでドキュメントを使用する方が少し簡単です。

おすすめ記事