쉘 스크립트를 사용하여 import 문을 동적으로 변경

쉘 스크립트를 사용하여 import 문을 동적으로 변경

배경

여러 파일이 들어 있는 폴더(클래스라고 함)가 있습니다. 모든 Java 파일을 반복하고 import 문을 변경하려면 쉘 스크립트를 작성해야 합니다.

 classes
 │  ├── Context.java
 │  |── abc.java
 │  |── cde.java
 │  ├── another.java

내부에는 Context.java다음이 있습니다.

import "../folder1/abc.java"
import "../cde.java"

일부 파일에는 import 문이 하나만 있습니다.

목표는 가져오기 위치를 에서 으로 변경하는 것 ../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하고 변수로 바꾸려고 합니다.

저는 맥 컴퓨터를 사용하고 있습니다.

관련 정보