【发布时间】:2015-05-08 16:47:44
【问题描述】:
我需要在目录中的许多文件中搜索关键字列表并为所有文件添加前缀。例如,如果我的目录中的各种文件包含术语 foo、bar 和 baz,我将需要更改这些术语的所有实例到:prefix_foo、prefix_bar 和 prefix_baz。
我想编写一个 shell 脚本来执行此操作,这样我就可以避免在 SublimeText 中一次搜索一个关键字(它们有很多)。不幸的是,我的shell-fu没有那么强。
到目前为止,按照this 的建议,我创建了一个名为“replace.sed”的文件,其中所有术语的格式如下:
s/foo/prefix_foo/g
s/bar/prefix_bar/g
s/baz/prefix_baz/g
它建议与此列表一起使用的终端命令是:
sed -f replace.sed < old.txt > new.txt
我可以通过设置以下脚本(我称之为 inline.sh)来调整它以替换文件中的实例(而不是创建新文件):
#!/bin/sh -e
in=${1?No input file specified}
mv $in ${bak=.$in.bak}
shift
"$@" < $bak > $in
综合起来,我得到了这个命令:
~/inline.sh old.txt sed -f replace.sed
我试过了,它可以一次处理一个文件。我将如何调整它以搜索和替换整个目录中的所有文件?
【问题讨论】:
-
通过shellcheck.net 运行您的脚本并修复它标记的问题——我的答案对于带有空格等的文件名是安全的,但您的
inline.sh目前是不是 i> 在这方面是安全的。