我的代码如下:
switch (argument0) {
case ("Goblin"):
return 0;
break;
case ("Fang"):
return 1;
break;
...
}
我如何使用sed或其他命令行工具切换返回和案例,如下所示:
switch (argument0) {
case (0):
return "Goblin";
break;
case (1):
return "Fang";
break;
...
}
答案 0 :(得分:2)
的内容
sed '/^[[:space:]]*case/ { N; s/case (\(.*\)):\(.* return \)\(.*\);/case (\3):\2\1;/; }' filename
那是:
/^[[:space:]]*case/ { # in lines that bein with "case" (optionally preceded by
# whitespace)
N # fetch the next line
# Then split, reassemble.
s/case (\(.*\)):\(.* return \)\(.*\);/case (\3):\2\1;/
}
请注意,这仅适用于格式非常严格的代码,例如return
标签后的case
和括号正确的代码。
顺便说一句,我无法想到在C语句break;
语句之后直接return
的原因。
答案 1 :(得分:2)
使用GNU awk进行多字符RS:
$ gawk -vRS="^$" -vORS= '{$0=gensub(/(case \()([^)]+)(\):\s*return )(\S+);/,"\\1\\4\\3\\2;","g")}1' file
switch (argument0) {
case (0):
return "Goblin";
break;
case (1):
return "Fang";
break;
...
}
如果/当出现空格时,可以在正则表达式中自由地展开\s*
。
答案 2 :(得分:0)
sed '/^[[:space:]]*case/ {N;s/\(.*\)\("[^"]*"\)\(.*return \)\([^;]*\);/\1\4\3\2;/;}' YourFile