我试图在HP-UX中执行递归查找和替换,但我遗漏了一些东西。
我目前所拥有的:
find . -name "*.java" | xargs sed 's/foo/bar/g'我知道问题在于它没有替换内联文件。我相信在其他操作系统上有一个-i标志,但在我的HP-UX版本中似乎没有。
有什么建议吗?
发布于 2013-01-11 21:03:37
find . -name "*.java" | xargs sed -i 's/foo/bar/g'或
find . -name "*.java" | xargs perl -pi -e's/foo/bar/g'发布于 2013-01-11 22:08:32
在文件上运行任何您喜欢的工具并“就地”更改它们(sed -i也在幕后使用临时文件)的简单、可移植的解决方案只是:
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解决方案也不会这样,如果有的话,您应该重命名这些文件。
https://stackoverflow.com/questions/14278552
复制相似问题