我试图使用shell脚本进行递归查找并替换目录中的java文件.它有效,但它隐藏了所有文件,并使用-e扩展名创建重复项
#!/bin/bash for file in $(find . -type f -name "*.java") do sed -i -e 's/foo/bar/g' $file done
根据我的理解,-e是可选的 - 但如果我不提供它,我会在它找到的每个文件上收到以下错误
sed: 1: "./DirectoryAdapter.java": invalid command code .
任何线索,因为这里发生了什么?作为参考,我在运行El Capitan的Mac OS X上
这是运行脚本后目录的前后屏幕截图.被替换的文件仍然存在,它们被隐藏了吗?
在OSX sed(BSD)上sed
需要一个扩展-i
选项.由于-e
之后发现它正在添加-e
到每个输入文件名.顺便说一下,你甚至不需要-e
选择.
你可以像这样传递一个空的扩展名:
sed -i '' 's/foo/bar/g' $file
或者.bak
用于扩展以保存原始文件:
sed -i.bak 's/foo/bar/g' $file