【发布时间】:2017-01-16 08:52:56
【问题描述】:
我有一个包含大量收集日志的日志文件,我已经使用正则表达式创建了一个grep 命令,该命令输出与其匹配的行数。
这是我用来输出匹配行的grep 命令:
grep -n -E 'START_REGEX|END_REGEX' Example.log | cut -d ':' -f 1 > ranges.txt
正则表达式是有条件的,它可以匹配特定日志的开头或结尾,因此输出类似于:
12
45
128
136
...
我们的想法是使用它作为范围的来源,对日志文件从第一个数字到第二个数字进行特定切割,并将它们保存在另一个文件中。
范围由一对输出组成,根据示例,第一个范围是12,45,第二个范围是128,136。
我希望在最终文件中看到来自行12 to 45 的所有文本,然后是来自128 to 136 的所有文本。
我面临的问题是sed 命令似乎一次只能使用一个范围。
sed -E -iTMP "$START_RANGE,$END_RANGE! d;$END_RANGEq" $FILE_NAME
有什么方法(可能是awk)在一个“周期”中做到这一点?
约束:我只能使用支持的 bash 命令。
【问题讨论】:
-
请从源头阐明范围的构成,并提供示例输入和输出。
-
在考虑复杂的 grep 之前,您实际上首先尝试做什么?
-
谢谢我更新了答案。
-
请注意,您可以在一个
awk或sed命令中完成所有操作。搜索sed/awk multiline matching