首页 > 解决方案 > 如何提取由多行星号分隔的文件的特定部分?

问题描述

我正在尝试从由多行 * 字符分隔的文件中提取文本的不同部分。该文件的内容如下所示:

**************************
**************************
abc123
abc1234
**************************
**************************
123abc
**************************
12ab34
**************************
**************************
12345
**************************
**************************
6789
abcd
1234
**************************
**************************

提取例如文件的第五部分的方法是什么?
第五部分包含以下行:

6789
abcd
1234

我尝试使用grep

grep -E -v '([^\*]*\*)' filename

该命令的输出是:

abc123
abc1234
123abc
12ab34
12345
6789
abcd
1234

标签: linuxbashshellawkgrep

解决方案


编辑:在这里添加一个更通用的解决方案。

awk '/^\*+/{if(prev!~/^\*/){count++}} count==5 && !/^\*/;{prev=$0}' Input_file


您能否尝试使用 GNU 进行跟踪、编写和测试,awk并且仅显示示例。

awk -v FS="*+" -v RS="^$" '{gsub(/^\n+|\n+$/,"",$10);print $10}' Input_file

第二种解决方案:更通用的解决方案。

awk '/^\*/{count++} count==9 && $0!~/^\*/' Input_file

推荐阅读