Вот небольшой трюк:
tac | sed -z 's@</script>@&\nsomething@' | tac
Поскольку sed
работает в первый раз, чтобы получить последний случай, вы можете:
tac
- перевернуть строки sed -z
- проанализировать поток как разделенный нулями, а затем tac
снова обратить строки.
Также &
в шаблоне замены в sed
означает весь подобранный образец. Таким образом, все </script>
в вашем случае.
Та да:
var_function_name="func_1"
var_js_code=$(printf '%s' "<script>"$'\n'"</script>"$'\n'"<script>"$'\n'"</script>"$'\n'"<script>"$'\n'"</script>"$'\n')
var_insert_js_code=$(echo "$var_js_code" | tac | sed -z 's|</script>|&\nvar result = '"$var_function_name"'();\nalert(result)|' | tac)
echo "$var_insert_js_code"
В sed
вы можете удерживать все строки вверх до шаблона и печатать последние строки, когда шаблон возникает и в последней строке добавьте данные:
sed -n '
\@</script>@{
x
s/^\n//
p
s/.*//
x
}
${
H;x
s/^/var result = '"$var_function_name"'();\nalert(result)/
p
q
}
H
'
и:
var_function_name="func_1"
var_js_code=$(printf '%s' "<script>"$'\n'"</script>"$'\n'"<script>"$'\n'"</script>"$'\n'"<script>"$'\n'"</script>"$'\n')
var_insert_js_code=$(echo "$var_js_code" | sed -n '\@</script>@{x;s/^\n//;p;s/.*//;x};${H;x;s/^/var result = '"$var_function_name"'();\nalert(result)/;p;q};H;$b')
echo "$ var_insert_js_code"