2017-12-01 3 views
0

複数のテストファイルにJavaアノテーションを追加する処理中です。私は100以上の場所の複数のファイルでテストメソッドのためにこれを行う必要があります。複数のファイルで異なる文字列でパターンを置換する方法

いくつかのスクリプト/正規表現を使用して、注釈を取得しました。残りの部分は、これらのアノテーションの属性値を提供している。以下のように、value = "search_pattern"value="replace_string1"に置き換える必要があります。ここで、replace_string1は、注釈が追加される関数の名前です(注釈の下に数行しか表示されません。参考までにスニペットを参照してください)。

各ファイルには注釈を適用する複数の機能があり、そのようなファイルが多数あります。

これをスクリプトする方法はありますか?

私はまだsedで運が見つかりませんでしたが、私はこれをすべて手作業で行う必要はありません。

@Prop(name = "Operation", value = "search_pattern") 
... 
@Test 
public void replace_string1() { 
    ...  
} 

@Prop(name = "Operation", value = "search_pattern") 
... 
@Test 
public void replace_string2() { 

} 
+0

あなたの質問は、現時点では少し控えめです。より詳細な情報を追加することをご検討ください。 – sjsam

+3

ようこそStackOverflowへ!私はこの質問に答えるのをやってみたいですが、あなたが実際に探していることを理解するのに十分な質問はありません。もしあなたがbashで何かしたいのであれば、あなたが今までに書いたbashコードを含めて、あなたが何をしたいのかを正確に説明し、あなたが得ている出力の例を与えてください。質問)とあなたが探している出力を表示します。 – ghoti

+0

sjsam @/ghoti @、私は質問を言い換えました。今より良いと思っています – Shiv

答えて

1

あなたは逆の順序でファイルを印刷tacの助けを借りてそれを行うことができますので、私たちは最後に再びそれを呼び出します。

tac file | awk '/^public void/ {v=$3; sub(/\(\)/,"",v)} 
    /^@Prop\(name = \"Operation\"/ {sub(/search_pattern/,v,$0)} 1' |tac 

hereあなたはawk機能subために見ることができます。最後の1は印刷することを意味します。

ディレクトリ内のすべての*.javaのためにそれをしたいのであれば、たとえば、あなたがこのような何かを実行することができます:あなたはそれなしでテストしている必要がありますので、

for f in *.java ; do 
    tac "$f" | awk '/^public void/ {v=$3; sub(/\(\)/,"",v)} 
     /^@Prop\(name = \"Operation\"/ {sub(/search_pattern/,v,$0)} 
     1' |tac > temp && mv temp "$f" 
done 

を最後mvコマンドプロンプトせずにファイルを置き換えます実行する前に。

+0

thanisp @、あなたと '' awk'''はsaversです:)私は十分にあなたに感謝することはできません。そして、残念ながら私は評判の欠如のためにアップフォートすることはできません。 – Shiv

+0

私はそれが助けになってうれしいです、歓声。 – thanasisp

関連する問題