sed:模式之间的多个范围,一次传递

sed:模式之间的多个范围,一次传递

我有一个脚本,它读取一个大约 3GB 的文件,并通过管道发送它,其中涉及文件的一小部分中的极少数替换。为了以最小的开销完成此任务,脚本指定了一个小的已知范围,在该范围内使用 进行替换sed '/begin/,/end/'

我想在同一文件中另一个小的、已知的“正则表达式分隔”范围中添加另外几个替换。如果我再次通过 sed 进行管道传输,则会带来不必要的开销,并且不会很好地扩展。

如果我知道它们在文件中出现的顺序,是否有办法指定模式之间的两个范围,以便该文件只需要读取一次?

'sed '/begin1/,/end1/ ... /begin2/,/end2/'我的想法是这样的。

sed手册状态

可以通过指定用逗号 (,) 分隔的两个地址来指定地址范围。

但它没有提到指定每组两个地址。

答案1

您不需要知道哪个范围首先出现在文件中。你可以写出显而易见的:

#/bin/sed -f

/begin1/,/end1/{
# commands specific to range 1
}

/begin2/,/end2/{
# commands specific to range 2
}

它会起作用的。

Sed 总是单次遍历其输入,读取每一行,通过您给定的命令对其进行处理,然后写入(或不写入,视情况而定)。您可以通过在管道中执行 sed 来证明这一点(管道输入不可查找,因此不可能进行多遍操作)。

相关内容