背景
我有一个文件夹(称为类),其中有多个文件。我需要编写一个 shell 脚本来遍历所有 java 文件并更改 import 语句。
例子
classes
│ ├── Context.java
│ |── abc.java
│ |── cde.java
│ ├── another.java
里面Context.java
,我有:
import "../folder1/abc.java"
import "../cde.java"
有些文件只有一个导入语句。
目标是将导入位置从 更改../folder/abc.java
为./abc.java
。并更改../cde.java
为./cde.java
.
到目前为止我已经尝试过:
for file in *.java; do
new_import=$(grep -h "import" $file | sed 's:.*/::' | perl -ne 'print "import \"./$_"')
因此new_import
变量可以检索文件名并在开头添加 import 关键字。现在我必须将import line
sed 的使用更改为new_import
.
# Inside the same for loop.
grep -h "import" $file | grep -v "@" | sed -i.bak "s:^.*import.*:$new_import:g"
据说这可以满足我的需要,但不起作用。我收到sed: -I or -i may not be used with stdin
错误。我尝试检索具有子字符串的行import
并替换为变量。
我使用的是mac电脑。