我正在尝试在 HP-UX 中进行递归查找和替换,但我遗漏了一些东西。
我目前拥有的:
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、cut,无论您喜欢什么:
find . -name "*.java" |
while IFS= read -r file; do
grep "whatever" "$file" > tmp && mv tmp "$file"
done
唯一不起作用的是名称包含换行符的文件,但find | xargs
解决方案也不是原样,如果你有它们,你应该重命名它们。