我的文件包含字符串OLD。我想将此字符串替换为NEW。我不仅要在当前目录中而且要在所有子目录中这样做,所以要递归地进行。
问题是,我在Solaris(v11.3)和以下命令上:
sed
和
perl
总是让我:非法选择。
f.e。我尝试了:sed -i -e's / OLD / NEW / g'*,我得到了:“-我非法选项”
还有其他选择吗?我也可以使用bash脚本。 这是一个生产环境,很遗憾,我无法安装任何编辑器。
更新:这可以按照我的要求进行:
perl -pi -e 's/OLD/NEW/g' *
但是它仅适用于当前目录中的文件。对于所有子目录,它返回我:
无法进行就地编辑:Folder_upgrades不是常规文件。 ... ...
但是,如果我转到Folder_upgrades并执行命令,它将起作用。
我应该添加什么来递归地执行它,所以我只运行一次,它将在所有子目录中的所有文件中起作用?
解决方案更新:该递归完全按照我的要求工作。尽管它返回有关文件不规则的错误,但仍然可以完成工作。
find . -exec perl -pi -e 's/OLD/NEW/g' '{}' \;
答案 0 :(得分:0)
您可以使用如下代码:
while read i
do
sed -e 's/OLD/NEW/g' "$i" >/tmp/tmp_file
mv /tmp/tmp_file "$i"
done < (find . -name "*your wildcard for files")
但是请注意,这只是一个示例,如果文件名中有空格或其他特殊字符,则可能无法正常工作!