用部分字符串替换sed

时间:2016-02-03 11:53:52

标签: regex linux sed

echo "/c/test/my0.txt" | sed 's/.\{5\}$/.\{4\}$/g'

是否可以用sed中该行的最后4个字符替换该行的最后5个字符?

我的文件名可以是任意长度,但结尾总是可预测的,即我想要替换的部分总是从最后5个字符开始

1 个答案:

答案 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/'