正規表現が予想データと一致しません。

正規表現が予想データと一致しません。

次のコマンドを使用してフィルタ基準に基づいてデータを抽出しようとしましたが、awk機能しません。この問題を修正できますか?

awk -v RS='' -v ORS='\n\n' '/func: peak*down*HIL/' filename

入力する:

func: peak_rec_head_HIL
sub: xyz
value: adc
log:path
close:date

func: peak_some_down_head_HIL
sub: xyz
value: adc
log:path
close:date

func: peak_another_one_down_head_HIL
sub: xyz
value: adc
log:path
close:date

func: peak_rec_head_HIL
sub: xyz
value: adc
log:path
close:date

func: peak_another_one_down_head_joy_HIL
sub: xyz
value: adc
log:path
close:date

予想出力:

func: peak_some_down_head_HIL
sub: xyz
value: adc
log:path
close:date

func: peak_another_one_down_head_HIL
sub: xyz
value: adc
log:path
close:date

func: peak_another_one_down_head_joy_HIL
sub: xyz
value: adc
log:path
close:date

ベストアンサー1

問題は正規表現にあります。部分文字列間の任意の文字数と一致するように*それぞれを置き換える必要があります。.*

awk -v RS='' -v ORS='\n\n' '/func: peak.*down.*HIL/' file

それぞれは、*式の前の部分の動作を修正して0回以上一致するようにします。この式は、などのいずれかpeak*downに一致しますpeadownpeakdownpeakkdownpeakkkdown

ファイル形式が使用するものと同じなのでGNUスラッシュ、私は個人的にデータを照会(または一般的に使用)するrecsel代わりに、以下を使用します。awk

recsel -e 'func ~ "peak.*down.*HIL"' file

汎用テキスト処理ツールよりもデータ型を理解するツールを使用する方が良い場合が多い(より簡単で、より強力でメンテナンスが簡単です)。

おすすめ記事