#!/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

京公网安备 11010502036488号