次のようなステートメントを含む Java ファイルがたくさんあります。
assertEquals(x, 0);
すべてのファイルで 2 つの引数を交換したいと思います。どうすればプログラムでそれを行うことができますか?
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 回の出現) -[ ]?
うまくいきませんでしたか?sed -i '/[(][ ]*\([^,]*\)[ ]*,[ ]*\([^)]*\)[ ]*[)]/ s::(\2,\1):' FILE