bashスクリプトに次のコードがあります
stat_pattern="POSITION_UPDATE [ For INRecord ]"
cat my_file.txt | awk -v pattern="$stat_pattern" '$0 ~ pattern' | tail -n 1
ただし、出力は返されません。「[」でも「\」を試しました。購入しても役に立ちませんでした。
"[" "]" 文字を検索文字列の一部として扱う方法を教えてください...
~
awk のチルダ演算子は、一致する文字列を正規表現として扱います。特殊な正規表現文字 ([
および]
あなたの場合) がある場合、正規表現の一致は失敗します。あなたの場合、awk 関数 index(in, find)を使用して、次のコードのように別の文字列内の文字列を検索することをお勧めします。
awk -v pattern="$stat_pattern" 'index($0, pattern) {line=$0}
END{print line}' my_file.txt
また、不要な cat と tail がコマンドにパイプされていることにも注意してください。すべて awk 自体で実行できるため、コマンドをリファクタリングしました。
次のように、エスケープ文字をエスケープする必要があります。
stat_pattern='POSITION_UPDATE \\[ For INRecord \\]'