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 回答