我需要搜索目录中的许多文件以获取关键字列表,并为所有这些文件添加前缀。例如,如果我的目录中的各种文件包含术语 foo , bar 和 baz ,我需要更改这些术语的所有实例to: prefix_foo , prefix_bar 和 prefix_baz 。
我想编写一个shell脚本来执行此操作,这样我就可以避免在SublimeText中一次搜索一个关键字(其中有很多)。不幸的是,我的shell-fu并不那么强大。
到目前为止,按照this建议,我创建了一个名为“replace.sed”的文件,其中所有术语的格式如下:
S /富/ prefix_foo /克
S /酒吧/ prefix_bar /克
S /巴兹/ prefix_baz /克
它建议用于此列表的终端命令是:
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
我尝试了这个并且它适用于一次一个文件。我如何调整它以搜索和替换整个目录中的所有文件?
答案 0 :(得分:2)
for f in *; do
[[ -f "$f" ]] && ~/inline.sh "$f" sed -f ~/replace.sed
done
答案 1 :(得分:1)
在剧本中:
#!/bin/bash
files=`ls -1 your_directory | egrep keyword`
for i in ${files[@]}; do
cp ${i} prefix_${i}
done
当然,这将使原件保持原样。