Linux 反向引用

问题位置:
linux sed 的s指令
疑问:
QQ图片20210929130002
1.“\” 代表啥意思?
QQ图片20210929130230
2.为什么用【22-24】不能匹配到22这个数据,导致我无法替换
3.【number-number】具体是什么意思?

你试试这样写呢? 正则表达式上表示21~25 应该是2[1-5]

echo 1 22 23 24 5 | sed -E 's#(2[1-3]) (2[2-4]) (2[2-4])#\3 \2 \1#'
1 Like

第一个问题

([1-3]) ([1-3]) ([1-3]) 这部分会命中前面字符串1 2 3 4 5中的1 2 3这个子字符串
因为每个([1-3])都带有() ,所以\1就会指代第一个括号内的表达式命中的结果 在这里就是字符串中的1 ,其余两个以此类推

第二个问题

因为shell并不支持这种用法,-两边只支持单数字或字母,才能表示对应的范围,[22-24]会被shell理解为2 2-2 4三种情况,最终结果只能命中2或者4

第三个问题

代表范围情况,比如想要匹配1-8中任意一个数,正常写的话需要写[12345678] 太繁琐了,所以简化方式就是[1-8] 包括字母也可以如此进行范围简化

2 Likes