パターンから次の空行まで行を削除する必要があります。
たとえば、
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
(削除)です。