[英]find last occurrence and prepend using sed
如何找到最后一次出现并添加数据? 我在sed
命令末尾尝试了\\1
,请参阅下面的代码:
#!/bin/bash
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 's|\(</script>\)|var result = '"$var_function_name"'();\nalert(result)\n\1|')
echo "$var_insert_js_code"
产生:
<script>
var result = func_1();
alert(result)
</script>
<script>
var result = func_1();
alert(result)
</script>
<script>
var result = func_1();
alert(result)
</script>
我只想在最后一个</script>
标记之前插入代码。 看看我想要什么,看看下面。 请注意,我不知道会有多少</script>
标签,因此我只想处理找到的最后一个标签。
<script>
</script>
<script>
</script>
<script>
var result = func_1();
alert(result)
</script>
这里有一个小技巧:
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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.