搜索和替换多个文件,包括子目录

我想搜索所有出现的:

 

在当前目录及其子目录中,将其替换为:

 <input type="hidden" name="_token" value="#STOKEN#"/>  

我在一个文件上尝试了以下内容。 touch该文件 – 上次修改日期已更改 – 但未进行替换:

 sed -i -re 's/\/\<input type="hidden" name="_token" value="\#STOKEN#\"\>\/gi' ./math.cfm 

我错过了什么? 有没有更好的命令用于此?

\<\>元素在sed正则表达式中具有特殊含义(作为单词边界)。

不要使用/作为sed的分隔符并试图使转义正确 - 选择一个未出现在文本中的备用分隔符,例如%|

i看来, iinsert )命令是比这个任务的s命令更自然的选择:你可以试试

 '\%% i\' 

要以递归方式将这样的命令应用于子目录,可以将sed命令作为-exec-execdir参数提供以find例如

 find path/to/dir -type f -name '*.cfm' -execdir sed -i -re '\%% i\' {} + 

或者,您可以使用shell的globstarfunction。