在sed需要一个贪婪的地址范围

时间:2015-11-09 00:11:44

标签: sed


我有一个bash脚本,我正在和Vim一起工作。此脚本在最终折叠结束之前将数据附加到文件,方法是复制带有最终# }}}的文件,然后附加新数据,后跟新的# }}}。以下代码片段可以更优雅,我有一个贪婪的地址范围。

local END=$(grep -n '# }}}'  $FILENAME   | sed -n "$ s/\([[:digit:]]*\)\(.*\)/\1/p ")
let END=$END-1
sed -n "1, $END {p}" $FILENAME  > $TEMPFILE

理论上如果sed支持'--greedy-address-range'标志,我可以使用它:sed --silent --in-place --greedy-address-range "1, /# }}}/ {p}" $FILENAME

当然,请提前感谢您的任何建议!

1 个答案:

答案 0 :(得分:1)

如果我理解你需要的输出,那么这也可以完成这项工作:

tac $FILENAME | sed -n '/# }}}/,$p' | tac > $FILENAME

为了打印所有行,直到最后匹配,我反转文件然后使用 sed要将第一次匹配中的所有行打印到EOF,然后再将其反转。