Unix HP-UX ksh递归查找和替换

时间:2013-01-11 12:50:06

标签: unix sed find ksh hp-ux

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

我现在所拥有的:

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

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

有什么建议吗?

2 个答案:

答案 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解决方案也不是原样,如果你有它们,你应该重命名它们。