はい.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.txt
2番目のファイル名。
明らかに、すべての特殊文字と引用符を引用できますが、スキーマをまったく変更する必要はないので、ここでドキュメントを使用する方が少し簡単です。