[英]Switch statement reverse using sed
我有看起来像这样的代码:
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;
...
}
遵循以下原则
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
标签和括号后面的行中,是正确的方式。
顺便说一句,我想不出break;
的理由break;
直接在C中的return
语句之后
对于多字符RS,使用GNU awk:
$ 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;
...
}
如果/当可能出现空白时,在regexp中自由撒\\s*
s。
sed '/^[[:space:]]*case/ {N;s/\(.*\)\("[^"]*"\)\(.*return \)\([^;]*\);/\1\4\3\2;/;}' YourFile
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.