我需要从模式中删除行到下一个空行。
例如:
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 中使用它。
提前致谢
csh和bash是外壳,不用于文本处理,但您可以像sed从这些外壳一样调用文本处理实用程序。使用sed,您可以删除两个模式之间的一系列线条,如下所示:
sed '/^fruits:/,/^$/d' yourfile
Run Code Online (Sandbox Code Playgroud)
说明:图案^fruits:匹配线开始fruits:,所述图案^$匹配空行(^是启动线,$是行尾)。用,手段分隔这些模式,以下命令将应用于该范围内的所有行,该命令是d(删除)。