パターンから次の空行まで行を削除する

パターンから次の空行まで行を削除する

パターンから次の空行まで行を削除する必要があります。

たとえば、

pets:
- cat
- dog
- fish

fruits:
- apple
- banana
- orange

colors:
- red
- blue
- pink

「fruit」(モード)から次の空行まですべての行を削除して、次のファイルを作成したいと思います。

pets:
- cat
- dog
- fish

colors:
- red
- blue
- pink

ご回答ありがとうございます。しかし何らかの理由でそれは私には効果がありません。

実際のファイルの例は次のとおりです。

2021  29 23 52  12.2358 -23.40477  -68.53253 142.9283 
L01   2021  29 23 52  32.950 
L01   2021  29 23 52  48.440*
L03   2021  29 23 52  32.730 
L03   2021  29 23 52  48.030 

2021  30  0 44  57.**** -23.****  -68.**** 149.****                                        
L02   2021  30  0 45  19.109
L02   2021  30  0 45  37.419
L04   2021  30  0 45  19.899
L04   2021  30  0 45  38.879

2021  30  1  6  32.7126 -23.45682  -68.65472 100.2616 
L01   2021  30  1  6  48.010
L01   2021  30  1  6  59.480*
L02   2021  30  1  6  47.970
L02   2021  30  1  6  59.380

私は必要です:表ヘッダーに****が付いているデータセットを削除する必要があります。この例では、以下を削除します。

2021  30  0 44  57.**** -23.****  -68.**** 149.****                                        
L02   2021  30  0 45  19.109
L02   2021  30  0 45  37.419
L04   2021  30  0 45  19.899
L04   2021  30  0 45  38.879

このデータを最終ファイルにインポートします。

2021  29 23 52  12.2358 -23.40477  -68.53253 142.9283 
L01   2021  29 23 52  32.950 
L01   2021  29 23 52  48.440*
L03   2021  29 23 52  32.730 
L03   2021  29 23 52  48.030 

2021  30  1  6  32.7126 -23.45682  -68.65472 100.2616 
L01   2021  30  1  6  48.010
L01   2021  30  1  6  59.480*
L02   2021  30  1  6  47.970
L02   2021  30  1  6  59.380

私がしたこと:

sed '/\*\*\*/,/^$/d' filename.data

そして

awk '/\*\*\*/,/^$/{next}1' filename.data

ただし、パターン以降のすべての項目を削除して最初のグループのみを残した後、結果は次のようになります。

2021  29 23 52  12.2358 -23.40477  -68.53253 142.9283 
L01   2021  29 23 52  32.950 
L01   2021  29 23 52  48.440*
L03   2021  29 23 52  32.730 
L03   2021  29 23 52  48.030 

他に何もなく、残りは削除されました。

私の質問が理解されることを願っています。

CSHとBASHについては、彼らがシェルであることを知っています。つまり、私が使用するコマンドがあり、それをCSHで使用できる必要があることを意味します。

事前にありがとう

ベストアンサー1

cshシェルであり、bashテキスト処理には適していませんが、sedこれらのシェルからテキスト処理ユーティリティを呼び出すことができます。を使用すると、sed次のように2つのパターン間の行範囲を削除できます。

sed '/^fruits:/,/^$/d' yourfile

説明:パターンは^fruits:で始まる行と一致しfruits:、パターンは^$空の行(^行の先頭、$行の終わり)と一致します。これらのパターンを平均で区切ると、次のコマンドが範囲,内のすべての行に適用されます。コマンドはd(削除)です。

おすすめ記事