我有一个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
当然,请提前感谢您的任何建议!
答案 0 :(得分:1)
如果我理解你需要的输出,那么这也可以完成这项工作:
tac $FILENAME | sed -n '/# }}}/,$p' | tac > $FILENAME
为了打印所有行,直到最后匹配,我反转文件然后使用
sed
要将第一次匹配中的所有行打印到EOF,然后再将其反转。