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