我试图在HP-UX中执行递归查找和替换,但缺少一些内容。Unix HP-UX ksh递归查找和替换
我在看什么:
find . -name "*.java" | xargs sed 's/foo/bar/g'
知道的问题是,它不是替换文件内联。我相信其他操作系统有一个-i标志,但在我的HP-UX版本中似乎没有。
有什么建议吗?
我试图在HP-UX中执行递归查找和替换,但缺少一些内容。Unix HP-UX ksh递归查找和替换
我在看什么:
find . -name "*.java" | xargs sed 's/foo/bar/g'
知道的问题是,它不是替换文件内联。我相信其他操作系统有一个-i标志,但在我的HP-UX版本中似乎没有。
有什么建议吗?
find . -name "*.java" | xargs sed -i 's/foo/bar/g'
或
find . -name "*.java" | xargs perl -pi -e's/foo/bar/g'
简单,便携的解决方案来运行你的文件喜欢的任何工具,并改变他们“就地”(SED -i在后台使用一个tmp文件太)只是:
find . -name "*.java" |
while IFS= read -r file; do
sed 's/foo/bar/g' "$file" > tmp && mv tmp "$file"
done
您可以使用SED,grep的,砍这种方法,不管你喜欢:
find . -name "*.java" |
while IFS= read -r file; do
grep "whatever" "$file" > tmp && mv tmp "$file"
done
唯一不起作用的是其名称中包含换行符的文件,但find | xargs
解决方案原样不变,您应该重命名这些文件,无论如何您都有这些文件。
请点击此处:http://theunixshell.blogspot.com/2012/12/find-and-replace-string-in-all-files.html – Vijay
另请参阅超级用户:http://superuser.com/q/532573/4714 –