1

次のようなステートメントを含む Java ファイルがたくさんあります。

assertEquals(x, 0);

すべてのファイルで 2 つの引数を交換したいと思います。どうすればプログラムでそれを行うことができますか?

4

2 に答える 2

7
sed 's/assertEquals(\([^,]*\), *\([^)]*\));/assertEquals(\2, \1);/g' <input.file >output.file

より良い:

sed 's/assertEquals(\([^,]*\),[ ]\{0,1\}\([^)]*\));/assertEquals(\2, \1);/g' <input.file >output.file

説明:

  • s/"pattern"/"substitution"/g //s => 置換、g => 行全体
  • \(...\)サブパターンをキャッチします。これは 経由で参照できます\number。だからロジックはs/assertEquals("pattern1","??whitespace??""pattern2");/assertEquals("pattern2", "pattern1");/g
  • [ ]\{0,1\}コンマの後の可能なスペースに一致します (0 または 1 回の出現) -[ ]?うまくいきませんでしたか?
于 2012-08-04T12:29:04.847 に答える
1
sed -i '/[(][ ]*\([^,]*\)[ ]*,[ ]*\([^)]*\)[ ]*[)]/ s::(\2,\1):' FILE
  • 引数間のスペースを削除します
  • 2 つの引数を持つすべての関数呼び出しの引数を交換します
于 2012-08-04T13:16:05.140 に答える