免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 5866 | 回复: 30

[文本处理] sed如何打印字段号【已解决】 [复制链接]

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2014-08-27 15:24 |显示全部楼层
本帖最后由 chengchow 于 2014-08-28 11:52 编辑

例如:"a b c d"输出"1 2 3 4"
echo "a b c d" | awk '{for(i=1;i<=NF;i++){$i=i}}1'
结果是:1 2 3 4

这里有个问题
如何用sed输出"1 2 3 4"
... ...

只用sed能否做到!

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-08-27 15:32 |显示全部楼层
闲得蛋疼~

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2014-08-27 15:45 |显示全部楼层
本帖最后由 jason680 于 2014-08-27 15:48 编辑

回复 1# chengchow

which one do you like it?

$ echo "a b c d" | sed 's/a/1/g;s/b/2/g;s/c/3/g;s/d/4/g;'
1 2 3 4

$ echo "a b c d" | sed 's/a b c d/1 2 3 4/g'
1 2 3 4

$ echo "a b c d" | tr abcd 1234
1 2 3 4

$ echo "a b c d" | perl -lape 's/\S+/++$c/ge'
1 2 3 4

   

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2014-08-27 15:51 |显示全部楼层
回复 3# jason680

看到这三种写法,我凌乱了
如果我+个e,又要重写了

顺便鄙视下星辰大神,我这是没事找事

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2014-08-27 16:05 |显示全部楼层

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2014-08-27 16:17 |显示全部楼层
回复 5# jason680

这个问题是别人问我的,我没想出来sed怎么做,用awk给对方做了
事后觉的纯粹sed处理这个有点难度,所以来论坛找各路高手看看,是sed做不了还是我对sed理解不到位
... ...
如提问,我说了是sed打印字段号?仅仅算是个学术讨论,做不做出来没关系的
到是让大伙误会了。
   

论坛徽章:
0
发表于 2014-08-27 16:35 |显示全部楼层
我写个无耻的。
  1. root@ubuntu:/home/tanght# echo "a b c d" | sed 's/ /\n/g;' | sed '=' | sed ':1;N;s/\n/ /;t1' | sed 's/[^0-9]/ /g'
  2. 1   2   3   4  
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
发表于 2014-08-27 16:41 |显示全部楼层
打点计数喽~
当然,用多个 sed 也算是只用 sed 吧:D
  1. [seesea@UC ~]$ echo "a b c d" | sed 's/ /\n/g' | sed -n '=' | sed -n 'H; ${g; s/^\n//; s/\n/ /g; p}';
  2. 1 2 3 4
  3. [seesea@UC ~]$ echo "a b c d" | sed 's/ /\n/g' | sed -n '=' | sed -n '1h; 1!H; ${g; s/\n/ /g; p}';         
  4. 1 2 3 4
复制代码

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2014-08-27 17:13 |显示全部楼层
echo "a b c d e" | sed 's/ /\n/g;' | sed '=;d' | sed '1h;1!H;$g;$!d;${s/\n/ /g}'
估计也只能这么无耻的写了!

论坛徽章:
766
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2014-08-27 19:45 |显示全部楼层
本帖最后由 Herowinter 于 2014-08-27 19:47 编辑

回复 1# chengchow


写了一个,但这么做,真的好吗?
  1. echo "a b c d"|sed -r 's/.*/&\n&\n/;:1;s/(\S+)(\s*)(.*\n.*)\1(.*\n)([0-9]*)/printf "%s%d%s%d" "\3" $((\5+1)) "\4" $((\5+1))/e;t1;s/.*\n(.*)\n.*/\1/'
  2. 1 2 3 4
复制代码
...我这代码还有bug,崩溃了,不想搞了,先回家了...
  1. echo "adga bggg cdf d dgfgfg"|sed -r 's/.*/&\n&\n/;:1;s/(\S+)(\s*)(.*\n.*)\1(.*\n)([0-9]*)/printf "%s%d%s%d" "\3" $((\5+1)) "\4" $((\5+1))/e;t1;s/.*\n(.*)\n.*/\1/'
  2. 1 2 3 5 46
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP