搜索和替换多个文件,包括子目录
我想搜索所有出现的:
在当前目录及其子目录中,将其替换为:
<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
看来, i
( insert )命令是比这个任务的s
命令更自然的选择:你可以试试
'\%% i\'
要以递归方式将这样的命令应用于子目录,可以将sed命令作为-exec
或-execdir
参数提供以find
例如
find path/to/dir -type f -name '*.cfm' -execdir sed -i -re '\%% i\' {} +
或者,您可以使用shell的globstar
function。