使用 shell 脚本动态更改导入语句

使用 shell 脚本动态更改导入语句

背景

我有一个文件夹(称为类),其中有多个文件。我需要编写一个 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电脑。

相关内容