Unix脚本替换多个文件中的字符串,并以其他名称保存

时间:2012-06-01 16:20:55

标签: unix batch-file sed replace

我正在尝试构建一个使用“sed”执行以下操作的脚本:

  • 在当前目录中搜索以.config结尾的文件(即:test.js.config)及其下的所有文件。
  • 将一个字符串替换为另一个字符串(即:{TEST} - > 50)
  • 将结果保存在最后没有.config的新文件中(例如:test.js)
  • 删除原始.config文件(即:test.js.config)

如果它能够使用另一个具有“要搜索的字符串”的文件并使用“要替换的字符串”,就像字典一样,那将是很棒的:

  

{TEST} = 50

     

{FIRST_NAME} =亚历克斯

1 个答案:

答案 0 :(得分:0)

您可以在文件中放入一堆sed s///命令:

$ cat change.sed 
s/{TEST}/50/g
s/{FIRST_NAME}/Alex/g

如果您有以下配置输入:     $ cat test.js.config     警报({TEST})     警报({FIRST_NAME})

结果将是:

$ sed -f change.sed test.js.config > test.js
$ cat test.js
alert(50)
alert(Alex)

语法不是很好,但它既不可怕:)

OTOH,如果你真的想在替换文件中使用括号语法......

$ cat test.js.config 
alert({TEST})
alert({FIRST_NAME})

...和替换文件中的键值对...

$ cat change.txt 
TEST=50
FIRST_NAME=Alex

...您可以编写一个sed命令来更改sed替换中的键值对...

$ sed 's#\(.*\)=\(.*\)#s/{\1}/\2/g#' change.txt
s/{TEST}/50/g
s/{FIRST_NAME}/Alex/g

...并在真正的替换中使用此命令:

$ sed "$(sed 's#\(.*\)=\(.*\)#s/{\1}/\2/g#' change.txt)" test.js.config > test.js
$ cat test.js
alert(50)
alert(Alex)