尽量用最简洁的sed命令来执行下边的任务

BadPattern 2015-12-03 02:31:53
有个C文件代码如下:

#include <stdio.h>
#include <limits.h>

int main(){
printf(" CHAR_BIT : %d\n",CHAR_BIT);
printf("CHAR_MIN : %d\n",CHAR_BIT);
printf("CHAR_MAX : %d\n", CHAR_BIT);
printf("INT_MIN : %d\n" ,CHAR_BIT);
printf(" INT_MAX : %d\n", CHAR_BIT);
printf("LONG_MIN : %ld\n", CHAR_BIT);
printf("LONG_MAX : %ld\n",CHAR_BIT);
printf("SCHAR_MIN : %d\n",CHAR_BIT);
printf(" SCHAR_MAX : %d\n",CHAR_BIT);
printf("SHRT_MIN : %d\n",CHAR_BIT);
printf(" SHRT_MAX : %d\n" ,CHAR_BIT);
printf("UCHAR_MAX : %d\n", CHAR_BIT);
printf("UINT_MAX : %d\n",CHAR_BIT);
printf("ULONG_MAX : %ld\n",CHAR_BIT);
printf(" USHRT_MAX : %d\n",CHAR_BIT);
return 0;
}

这个代码是为打印整数类型在机器上的取值范围
现在打印的值全是CHAR_BIT,需要将右边CHAR_BIT的值相应的替换成左边对应的字符串中的值,如果用sed来实现,怎么来写呢?
为了增加难度,我特意加了几个空格在代码里面
...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
BadPattern 2015-12-07
  • 打赏
  • 举报
回复
引用 2 楼 lee244868149 的回复:
sed 's/\(.*\)"\(.*\):\(.*\),\(.*\))\(.*\)/\1\2:\3\2)\5/g' a.txt 这里没有对你特意添加的空格进行处理,个人觉得这种故意使代码不规范化,而增加别人工作量的行为,不可取。
好吧,我主要是想看看有没有不用这样分n多组的方法来解决这个问题,应该是没有了 sed,awk处理还是要基于规范化的数据,不然脚本就没法写了,故意使文本不规范确实不可取
奔跑的路 2015-12-06
  • 打赏
  • 举报
回复
sed 's/\(.*\)"\(.*\):\(.*\),\(.*\))\(.*\)/\1\2:\3\2)\5/g' a.txt 这里没有对你特意添加的空格进行处理,个人觉得这种故意使代码不规范化,而增加别人工作量的行为,不可取。
泽坤 2015-12-04
  • 打赏
  • 举报
回复
用awk更方便一些吧。假设你的代码存在test.c里面,下面一条命令搞定: cat test.c | awk -F '[":]' '{print "printf(\""$2": %d\\n\", "$2");"}'

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧