regex - 如何使用 awk 或 sed 移动 c++ 代码的重复部分和行?
问题描述
我有大量的 C++ 代码,其中包含数千行,如下所示:
case 14: //OrderSelect
Execute_OrderSelect();
break;
case 15: // OrderGetDouble
Execute_OrderGetDouble();
break;
case 16: //OrderGetInteger
Execute_OrderGetInteger();
break;
我的任务是让它们看起来像这样:
case 14: Execute_OrderSelect(); break; // OrderSelect
case 15: Execute_OrderGetDouble(); break; // OrderGetDouble
case 16: Execute_OrderGetInteger(); break; // OrderGetInteger
请注意,Execute...和 comments 都可以是任何字符串。
我想示意性地我们可以这样写原件:
AAA NN BBB
CCC
DDD
并尝试将其变成:AAA NN CCC DDD BBB
.
我尝试过各种sed
表达式都没有成功,我能做的最好的就是将 与 结合起来的琐碎操作Execute...()
,break;
但无法移动评论。我在想我为此使用了错误的工具,也许awk
会是更好的选择或更易于使用?
以下是一些awk
变量:
FNR The input record number in the current input file.
FS The input field separator, a space by default.
NF The number of fields in the current input record.
NR The total number of input records seen so far.
OFMT The output format for numbers, "%.6g", by default.
OFS The output field separator, a space by default.
ORS The output record separator, by default a newline.
RS The input record separator, by default a newline.
RT The record terminator. Gawk sets RT to the input
text that matched the character or regular expression
specified by RS.
RSTART The index of the first character matched by match(); 0 if no match
我怎样才能让我的一天更美好?
相关问题:
解决方案
这是骨头,适合按摩;
$ cat tst.awk
/^[[:space:]]*case[[:space:]]/ {
comment = ""
if ( match($0,"//") ) {
comment = substr($0,RSTART)
$0 = substr($0,1,RSTART-1)
}
caseLineNr = 1
}
caseLineNr {
if ( caseLineNr++ > 1 ) {
sub(/^[[:space:]]+/,"")
}
sub(/[[:space:]]+$/,"")
printf "%s\t", $0
if ( /^break[[:space:]]*;/ ) {
print comment
caseLineNr = 0
}
}
$ awk -f tst.awk file
case 14: Execute_OrderSelect(); break; //OrderSelect
case 15: Execute_OrderGetDouble(); break; // OrderGetDouble
case 16: Execute_OrderGetInteger(); break; //OrderGetInteger
推荐阅读
- neural-network - 卷积神经网络过滤器
- android - Unity - 将 Firebase 与 Facebook 登录一起使用时,SignInWithCredentialAsync 会导致内部错误
- python - 如何使用python删除根标签并保留xml中的所有行标签
- jenkins - rsync --include 没有按预期工作
- single-sign-on - Keycloak : 单次登出(SLO)
- arrays - 使用粘贴命令在电子邮件中换行
- android - 使用 Expo 在 react-native 上共享图像和文件
- django - 如何在drf django中执行删除方法
- android - TensorFlow Lite 和 Android Things - 定位检测到的对象并将它们存储在 RectF 对象中?
- python - Matplotlib 动画:如何动态扩展 x 限制?