免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8111 | 回复: 6
打印 上一主题 下一主题

[文本处理] sed匹配的字符能否数学计算 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2021-08-19 11:14 |只看该作者 |倒序浏览
a文本里所以数字+3怎么写

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2021-08-20 17:08 |只看该作者
vim下十分容易
:%s/[0-9]\+/\=submatch(0)+3/g
sed不直接支持数学运算,但是可以用e,不过我不喜欢,
既然不包含e也是图灵完备,当然可以,写一个吧
以下只针对非负整数
  1. #!/bin/sed -nrf
  2. :a
  3. s/(^|\n)([^0-9\n]+)([0-9][^\n]*)$/\1\2\n\3/
  4. s/(^|\n)([0-9]+)([^0-9\n][^\n]*)$/\1\2\n\3/
  5. ta

  6. s/^/\n\n/
  7. :b
  8. s/\n\n([^0-9\n]+)/\1\n/
  9. tb
  10. /\n\n[0-9]/ {
  11.         s/(\n\n[0-9]*)0($|\n)/\13\2/
  12.         td
  13.         s/(\n\n[0-9]*)1($|\n)/\14\2/
  14.         td
  15.         s/(\n\n[0-9]*)2($|\n)/\15\2/
  16.         td
  17.         s/(\n\n[0-9]*)3($|\n)/\16\2/
  18.         td
  19.         s/(\n\n[0-9]*)4($|\n)/\17\2/
  20.         td
  21.         s/(\n\n[0-9]*)5($|\n)/\18\2/
  22.         td
  23.         s/(\n\n[0-9]*)6($|\n)/\19\2/
  24.         td
  25.         s/(\n\n[0-9]*)7($|\n)/\1x0\2/
  26.         s/(\n\n[0-9]*)8($|\n)/\1x1\2/
  27.         s/(\n\n[0-9]*)9($|\n)/\1x2\2/
  28.         tc
  29.         :c
  30.         s/(\n\n)x/\11/
  31.         s/(\n\n[0-9]*)0x/\11/
  32.         s/(\n\n[0-9]*)1x/\12/
  33.         s/(\n\n[0-9]*)2x/\13/
  34.         s/(\n\n[0-9]*)3x/\14/
  35.         s/(\n\n[0-9]*)4x/\15/
  36.         s/(\n\n[0-9]*)5x/\16/
  37.         s/(\n\n[0-9]*)6x/\17/
  38.         s/(\n\n[0-9]*)7x/\18/
  39.         s/(\n\n[0-9]*)8x/\19/
  40.         td
  41.         s/(\n\n[0-9]*)9x/\1x0/
  42.         tc
  43.         :d
  44.         s/\n\n([0-9]+)/\1\n/
  45. }
  46. tb

  47. s/\n//g
  48. p
复制代码

论坛徽章:
0
3 [报告]
发表于 2021-08-22 20:11 |只看该作者
这么麻烦 最喜欢sed可以读写源文件 awk和perl也好

论坛徽章:
0
4 [报告]
发表于 2021-08-22 20:15 |只看该作者
js:fileStr.replace(/\d+/g,r=>r-0+3)

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2021-08-23 16:20 |只看该作者
本帖最后由 cjaizss 于 2021-08-23 16:25 编辑

如果用e,以上代码会简单很多
  1. #!/bin/sed -nrf
  2. :a
  3. s/(^|\n)([^0-9\n]+)([^\n]*)$/\1echo '\2'\n\3/
  4. s/(^|\n)([0-9]+)([^\n]*)$/\1expr 3 + \2\n\3/
  5. ta
  6. e
  7. s/\n//g
  8. p
复制代码

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
6 [报告]
发表于 2021-08-30 16:19 |只看该作者
回复 2# cjaizss

大佬能解释下不,看的一脸懵逼

论坛徽章:
1
19周年集字徽章-年
日期:2020-10-29 09:39:21
7 [报告]
发表于 2021-09-18 14:24 |只看该作者
perl -pe's#\d+#$&+3#ge'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP