从模式中删除行到下一个空行

DAN*_*LLE -2 text-processing

我需要从模式中删除行到下一个空行。

例如:

pets:
- cat
- dog
- fish

fruits:
- apple
- banana
- orange

colors:
- red
- blue
- pink
Run Code Online (Sandbox Code Playgroud)

我想删除从“fruit”(模式)到下一个空行的所有行,从而生成如下文件:

pets:
- cat
- dog
- fish

colors:
- red
- blue
- pink
Run Code Online (Sandbox Code Playgroud)

非常感谢您的回答,但由于某种原因它对我不起作用。

以下是实际文件的示例:

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

Run Code Online (Sandbox Code Playgroud)

我需要什么:我需要删除标题中出现 **** 的数据集,在这种情况下要删除:

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

Run Code Online (Sandbox Code Playgroud)

获取作为最终文件的这些数据:

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

Run Code Online (Sandbox Code Playgroud)

我做了什么

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

Run Code Online (Sandbox Code Playgroud)

awk '/\*\*\*/,/^$/{next}1' filename.data
Run Code Online (Sandbox Code Playgroud)

但是删除模式之后的所有内容,只保留第一组,结果如下:

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 
Run Code Online (Sandbox Code Playgroud)

没有别的,其余的都被删除了。

我希望我的问题被理解。

关于 CSH 和 BASH,我知道它们是 shell,我的意思是我有我使用的命令,我必须能够在 CSH 中使用它。

提前致谢

Phi*_*pos 6

cshbash是外壳,不用于文本处理,但您可以像sed从这些外壳一样调用文本处理实用程序。使用sed,您可以删除两个模式之间的一系列线条,如下所示:

sed '/^fruits:/,/^$/d' yourfile
Run Code Online (Sandbox Code Playgroud)

说明:图案^fruits:匹配线开始fruits:,所述图案^$匹配空行(^是启动线,$是行尾)。用,手段分隔这些模式,以下命令将应用于该范围内的所有行,该命令是d(删除)。