我想要搜索所有出现的:
</form>
在当前目录及其子目录中将每个出现的内容替换为:
<input type="hidden" name="_token" value="<cfoutput>#STOKEN#</cfoutput>"/>
</form>
我在一个文件上尝试了以下操作。文件被touch
编辑——上次修改日期已更改——但未进行替换:
sed -i -re 's/\<\/form\>/\<input type="hidden" name="_token" value="\<cfoutput\>#STOKEN#\<\/cfoutput\>"\>\<\/form\>/gi' ./math.cfm
我错过了什么? 有没有更好的命令可用于此?
答案1
\<
和元素\>
在 sed 正则表达式中具有特殊含义(作为单词边界)。
不要使用/
sed 的分隔符并尝试正确转义而使事情变得困难 - 选择文本中未出现的替代分隔符,例如%
或|
。
这i
(插入) 命令对我来说似乎是比此任务的命令更自然的选择s
:你可以尝试
'\%</form>% i\<input type="hidden" name="_token" value="<cfoutput>#STOKEN#</cfoutput>"/>'
要将此类命令递归地应用于子目录,您可以将 sed 命令作为-exec
或-execdir
参数提供到find
例如
find path/to/dir -type f -name '*.cfm' -execdir sed -i -re '\%</form>% i\<input type="hidden" name="_token" value="<cfoutput>#STOKEN#</cfoutput>"/>' {} +
或者,您可以使用 shell 的globstar
功能。