问题位置:
linux sed 的s指令
疑问:
1.“\” 代表啥意思?
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