Chinaunix

标题: sed匹配的字符能否数学计算 [打印本页]

作者: REFRESHMM    时间: 2021-08-19 11:14
标题: sed匹配的字符能否数学计算
a文本里所以数字+3怎么写

作者: cjaizss    时间: 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
复制代码

作者: REFRESHMM    时间: 2021-08-22 20:11
这么麻烦 最喜欢sed可以读写源文件 awk和perl也好

作者: REFRESHMM    时间: 2021-08-22 20:15
js:fileStr.replace(/\d+/g,r=>r-0+3)

作者: cjaizss    时间: 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
复制代码

作者: baby_神    时间: 2021-08-30 16:19
回复 2# cjaizss

大佬能解释下不,看的一脸懵逼
作者: legs    时间: 2021-09-18 14:24
perl -pe's#\d+#$&+3#ge'




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2