背景
複数のファイルを含むフォルダ(クラスと呼ばれる)があります。すべてのJavaファイルを繰り返してimport文を変更するには、シェルスクリプトを作成する必要があります。
はい
classes
│ ├── Context.java
│ |── abc.java
│ |── cde.java
│ ├── another.java
内部にはContext.java
以下があります。
import "../folder1/abc.java"
import "../cde.java"
一部のファイルにはimport文が1つしかありません。
目標は、インポート位置をからに変更すること../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コンピュータを使用しています。