2012-08-04 57 views
1

我有很多的含有這樣的語句Java文件:修改使用java文件GAWK/AWK/SED(換Java函數參數)

assertEquals(x, 0); 

我想交換兩個參數在每一個文件。我怎麼能以編程的方式做到這一點?

+0

是他們都完全一樣,所有的函數調用的參數,或者他們有不同的變量名稱? – John3136 2012-08-04 12:26:57

+0

不需要awk或sed,你的IDE會爲你做這件事(它幾乎可以肯定支持查找/替換中的正則表達式) – artbristol 2012-08-04 13:29:16

+0

John3136:沒有任何爭論可以是隨機的 artbristol:我在Eclipse可能嗎? – cdupont 2012-08-04 13:35:37

回答

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次出現) - [ ]?對我不起作用?
+0

非常感謝! 我只是不明白'\(... \):''[^,] *' – cdupont 2012-08-04 13:37:07

+0

'[^,]'==「除了逗號」,「*'==」0或更多以前的「 – 2012-08-04 17:15:24

+0

我建議這被接受爲答案。 – jwir3 2014-11-04 19:30:47

1
sed -i '/[(][ ]*\([^,]*\)[ ]*,[ ]*\([^)]*\)[ ]*[)]/ s::(\2,\1):' FILE 
  • 消除參數之間的空間
  • 交換有2個參數