echo "/c/test/my0.txt" | sed 's/.\{5\}$/.\{4\}$/g'
是否可以用sed中该行的最后4个字符替换该行的最后5个字符?
我的文件名可以是任意长度,但结尾总是可预测的,即我想要替换的部分总是从最后5个字符开始
答案 0 :(得分:2)
单独匹配它们,并省略不需要的字符:
echo "/c/test/my0.txt" | sed 's/.\(....\)$/\1/'
您接下来的另一种方法:您可以明确定位文件名后缀之前的最后一个字符;即使后缀包含更多或更少的字符(.mpeg
,.c
,.txt~
等,这也能正常工作。)
echo "/c/test/my0.txt~" | sed 's/.\.\([^.][^.]*\)$/.\1/'
使用sed -E
(推荐),您可以使用标准的“现代”正则表达式并将最后一个写为:
echo "/c/test/my0.txt~" | sed -E 's/.\.([^.]+)$/.\1/'