Я пытался использовать sed
для вставки $new
перед $orig
, лежащим между $Initial
и $Final
, следующим образом:
Initial="# Introduction"; \
Final="# External links"; \
orig="\n#(.*)\n"; \
new="\n<p><a href="#top" accesskey="t">[Top]</a></p>"; \
file="Input.md"; \
sed -i -r -e "\!$Initial!,\!$Final!!^$orig!i $new!g" $file ; \
Примечание: я использовал ^
, чтобы паттерн начинался с позиции 0
Входной файл:
# Dummy
# Introduction
-
# Summary
-
### See also
-
## References
-
# External links
# Dummy
Ожидаемый выходной файл:
# Dummy
# Introduction
-
<p><a href="#top" accesskey="t">[Top]</a></p>
# Summary
-
<p><a href="#top" accesskey="t">[Top]</a></p>
### See also
-
<p><a href="#top" accesskey="t">[Top]</a></p>
## References
-
<p><a href="#top" accesskey="t">[Top]</a></p>
# External links
# Dummy
Работает следующая подстановка (замена между двумя шаблонами и против шаблона):
Initial="# See also"; \
Final="# External links"; \
orig="\.\./(.*)\.md"; \
new="../../Rendered/\1.gen.pdf"; \
file="tempPDF.md"; \
sed -i -r -e "\!$Initial!,\!$Final!s!$orig!$new!g" $file ; \
Я знаю, что синтаксис вставки
sed -i '/pattern/i TextToInsert ' inputfile
Так что я забил этих двоих, как указано выше.
Я думаю, что проблема заключается в orig="\\n#(.*)\\n"; \
и синтаксисе sed в sed -i -r -e "\!$Initial!,\!$Final!!^$orig!i $new!g" $file ; \