0

シェル スクリプトを使用して変数代入ステートメントを置き換える必要があります。例: MyConstants.java ファイルには次のような行が含まれています。

 String abcd = "ABCD"; 
 String abc = "ABC";
 String e = abcd + "e";

変数abcdを次のように置き換える必要があります

 String abcd = "newString"; 
 String abc = "ABC";
 String e = abcd + "e";

問題は、 \n \r 文字がランダムに含まれていることです

  String abcd = 
 "ABCD"; 
 or 
 String abcd 
 = 

 "ABCD";
 String abc = "ABC";
 String e = abcd + "e";

How to replace catch block in *.java using sed? を見ました。 ただし、すべてのコマンドは単一の行パターンに基づいています。(入力を 1 行として受け取ります) どうすればこれを整理できますか? 助けてください。

4

3 に答える 3

0

ソースファイルは次のとおりです。

$ cat test
String abcd =
"ABCD";
String abcd
=
"ABCD";
String abc = "ABC";
String e = abcd + "e";

これは、間違った場所からすべての \n\r を置き換えて変数値を変更する方法です。

cat test | tr '\n' ' ' | sed 's/abcd = \"[a-zA-Z0-9_]*\"/abcd = \"newString\"/g' | tr ';' '\n'
String abcd = "newString"
 String abcd = "newString"
 String abc = "ABC"
 String e = abcd + "e"
于 2013-03-22T12:24:34.773 に答える
0

これが出発点として機能するかどうかを確認してください。

sed -ne "H;/;/bsubst;\$bsubst;b;:subst;s/.*//;x;s/^\n//;/String\s*abcd/s/\".*\"/\"newstring\"/;p" testfile

これが行うことは次のとおりです。すべての行がホールド スペース (H) に追加されます。or が最終行の場合、:subst ラベルにジャンプします。それ以外の場合は、最後にジャンプして次の行に進みます。

:subst で、現在の行をクリアし、ホールド スペースと交換します (これにより、蓄積されたデータが取得され、次のバッチのためにホールド スペースがクリアされます)。次に、この時点で余分な改行文字があるように見えるため (理由は不明)、改行文字を削除します。その後、行に正しい変数名が含まれている場合、変数の値の置換を行い、私たちが持っているものをすべて出力します。誰にでもできるとは言えませんが、テスト データに対しては機能します。

于 2013-03-22T14:46:57.810 に答える
0

「ABCD」だけを「newString」に置き換えてみませんか?お気に入り

sed 's/\"ABCD\"/\"newString\"/'

または /n/r 記号は "ABCD" の途中にありますか? または、";" の近くに配置されていない /n/r/ を最初に削除する方法もあります。

于 2013-03-22T11:01:45.673 に答える