2

bashスクリプトに次のコードがあります

stat_pattern="POSITION_UPDATE [ For INRecord ]"
cat my_file.txt | awk -v pattern="$stat_pattern" '$0 ~ pattern' | tail -n 1 

ただし、出力は返されません。「[」でも「\」を試しました。購入しても役に立ちませんでした。

"[" "]" 文字を検索文字列の一部として扱う方法を教えてください...

4

3 に答える 3

2

~awk のチルダ演算子は、一致する文字列を正規表現として扱います。特殊な正規表現文字 ([および]あなたの場合) がある場合、正規表現の一致は失敗します。あなたの場合、awk 関数 index(in, find)を使用して、次のコードのように別の文字列内の文字列を検索することをお勧めします。

awk -v pattern="$stat_pattern" 'index($0, pattern) {line=$0} 
       END{print line}' my_file.txt 

また、不要な cat と tail がコマンドにパイプされていることにも注意してください。すべて awk 自体で実行できるため、コマンドをリファクタリングしました。

于 2013-04-13T09:05:21.873 に答える
0

次のように、エスケープ文字をエスケープする必要があります。

stat_pattern='POSITION_UPDATE \\[ For INRecord \\]'
于 2013-04-13T08:10:25.150 に答える