我正在尝试在HP-UX中进行递归查找和替换,但我错过了一些东西。
我现在所拥有的:
find . -name "*.java" | xargs sed 's/foo/bar/g'
知道问题是它没有替换内联文件。我相信其他操作系统有一个-i标志,但似乎在我的HP-UX版本中,没有。
有什么建议吗?
答案 0 :(得分:2)
find . -name "*.java" | xargs sed -i 's/foo/bar/g'
或
find . -name "*.java" | xargs perl -pi -e's/foo/bar/g'
答案 1 :(得分:1)
在文件上运行您喜欢的任何工具并“就地”更改它们的简单,可移植的解决方案(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,cut,无论你喜欢什么:
find . -name "*.java" |
while IFS= read -r file; do
grep "whatever" "$file" > tmp && mv tmp "$file"
done
唯一不起作用的是名称中包含换行符的文件,但find | xargs
解决方案也不是原样,如果你有它们,你应该重命名它们。