匹配一行文本后插入新的文本行(sed)?

匹配一行文本后插入新的文本行(sed)?

我需要将隐藏的 HTML 输入标记插入到一堆 HTML 文件中的任何表单标记中。

我的想法是搜索任何实例

<form

如果找到,则在其下方插入一行,其中包含:

<input type="hidden" name="csrf_token" value="$csrf_token" /> 

解决这个问题的最佳方法是什么?我很接近

sed -e '/<form/a\<input type="hidden" name="csrf_token" value="$csrf_token"/>'

答案1

要在每个下面添加一些内容,<form您必须添加& 以表明您想要保留捕获的序列(加上\n您提到的您需要它):

$ find *.html | xargs sed -ie 's/<form/&\n\<input type="hidden" name="csrf_token" value="$csrf_token"\/>/g'

答案2

知道了。下面是它的实现方法:

find . -name \*.html | xargs sed -i '/<form/a\<input type="hidden" name="csrf_token" value="$csrf_token" />'

答案3

使用这个 perl 单行代码可以轻松实现这一点:

perl -i.bkp -pe 's|<form|<form\n<input type="hidden" name="csrf_token" value="$csrf_token" /> |' *.html

-i 用于就地编辑

.bkp 创建具有该扩展名的备份文件。

相关内容