1

我正在尝试在 HP-UX 中进行递归查找和替换,但我遗漏了一些东西。

我目前拥有的:

find . -name "*.java" | xargs sed 's/foo/bar/g'

知道问题是它没有替换内联文件。我相信在其他操作系统上有一个 -i 标志,但在我的 HP-UX 版本中似乎没有。

有什么建议么?

4

2 回答 2

2
find . -name "*.java" | xargs sed -i 's/foo/bar/g'

或者

find . -name "*.java" | xargs perl -pi -e's/foo/bar/g'
于 2013-01-11T13:03:36.513 回答
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解决方案也不是原样,如果你有它们,你应该重命名它们。

于 2013-01-11T14:08:31.893 回答