#!/bin/bash sed ' :a; s/\B[0-9]\{3\}\>/,&/; ta ' nowcoder.txt # :a 定义一个标签 a,用于循环 # ta 如果替换成功,则跳转到标签a,继续下一次替换 # [0-9]\{3\} 匹配三个连续的数字 \ 是用来转义{ 和 } # :a 和 ta 构成了循环 # 例如nowcoder.txt的内容是 123456789 # \B 把前3个数字作为边界 # \> 把后3个数字作为边界 # 第一次替换: 匹配 \B[0-9]\{3\}\>,找到 456 将其前面加上逗号,结果变为 123,456789 # 第二次替换: 匹配 \B[0-9]\{3\}\>,找到 789 将其前面加上逗号,结果变为 123,456,789 # 第三次替换: 最后的3个数字已经是边界,因此替换操作没有效果 # 例如nowcoder.txt的内容是 123456789 # 第一次替换: 按最后3个数字替换,因为 ,& # echo "123456789" | sed 's/[0-9]\{3\}/&,/' # 123,456789 # echo "123456789" | sed 's/[0-9]\{3\}/,&/' # ,123456789 # echo "123abc456" | sed 's/\B[0-9]/X/g' 将连续数字中非首位的数字替换为 "X" # 1XXabc4XX # echo "cats dogs birds" | sed -n 's/s\>/Y/gp' # catY dogY birdY # echo "file1 file2 file file123" | sed -n 's/[0-9]\>/Y/gp' # fileY fileY file fileYYY
END