grep または egrep を使用して出力インスタンス間の区切り文字で出力形式を指定する方法はありますか?

grep または egrep を使用して出力インスタンス間の区切り文字で出力形式を指定する方法はありますか?

大量のデータを含むデータセットがあります。

ID Number:  A00001
Name:       John Smith
Address:    123 Any Street
City:       AnyTown
State:      Ohio
Zip:        12345

ID Number:  A00002
Name:       Jane Doe
Address:    123 Any Street
City:       AnyTown
State:      Nebraska
Zip:        12346

ID Number:  C00003
Name:       Jim Shields
Address:    123 Any Street
City:       AnyTown
State:      Alaska
Zip:        12347

ID Number:  D11111
Name:       Mary Ellis
Address:    123 Any Street
City:       AnyTown
State:      Nevada
Zip:        12348

データを抽出して次のように分離したいと思います。

ID Number:  A00001
Name:       John Smith
Zip:        12345
=========================
ID Number:  A00002
Name:       Jane Doe
Zip:        12346
=========================
ID Number:  C00003
Name:       Jim Shields
Zip:        12347
=========================
ID Number:  D11111
Name:       Mary Ellis
Zip:        12348
=========================

私は見つけることができるすべてのgrepとegrepオプションを試しましたが、最も近い方法は各出力行の間に空白行(新しい行)を置くことです。

ベストアンサー1

grepテキスト形式を再指定するツールではなく、パターンマッチングツールです。代わりにsedawkまたは同じものを使用してくださいperl。たとえば、

$ awk '/^(ID Number|Name|Zip):/;
       /^[[:blank:]]*$/ { print "=========================" }'
ID Number:  A00001
Name:       John Smith
Zip:        12345
=========================
ID Number:  A00002
Name:       Jane Doe
Zip:        12346
=========================
ID Number:  C00003
Name:       Jim Shields
Zip:        12347
=========================
ID Number:  D11111
Name:       Mary Ellis
Zip:        12348

これは[[:blank:]]*どの行にも一致しますバラより空いているようですが、実際にはスペースやタップのような横空間が入っていますが…目でしか見づらい部分なので思ったより一般的に発生します。

またはPerlを使用してください。

perl -l -n -e 'print if /^(ID Number|Name|Zip):/;
               print "=" x 25  if /^\h*$/' input.txt

または、最初にPerl REの「水平空間」を理解するsedGNU sedまたは他のsedがある場合:\h

sed -n -E -e '/^(ID Number|Name|Zip):/p; s/^\h*$/=========================/p' input.txt 

それ以外の場合は sed を使用します。

sed -n -E -e '/^(ID Number|Name|Zip):/p; s/^[[:blank:]]*$/=========================/p' input.txt

おすすめ記事