需要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支持"--贪婪地址范围"标志,我可以使用这个:sed --silent --in-place --greedy-address-range "1, /# }}}/ {p}" $FILENAME

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

如果我很好地理解了你需要的输出,这也能很好地完成任务:

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

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

最新更新