![将最后一个点之后的任何字符串替换为 txt 字符串](https://linux22.com/image/141110/%E5%B0%86%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E7%82%B9%E4%B9%8B%E5%90%8E%E7%9A%84%E4%BB%BB%E4%BD%95%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%9B%BF%E6%8D%A2%E4%B8%BA%20txt%20%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
如何替换最后一个“.”之后的任何字符串到txt
例如
filter.bash
sum.sh
portG.py
run.doK.ksh
预期成绩
filter.txt
sum.txt
portG.txt
run.doK.txt
答案1
sed 's/[^.]*$/txt/'
或者仅对包含至少一个的行执行此操作.
(不更改myfile
为txt
):
sed 's/\.[^.]*$/.txt/'
还要避免替换.bashrc
为.txt
:
sed 's/\(..*\.\).*/\1txt/'
(这次我们靠贪婪来替.*
换掉后面的部分最后的 .
)。
还要避免替换foo.d/myfile
为foo.txt
:
sed 's|\([^/]\.\)[^./]*$|\1txt|'
还要向.txt
没有任何扩展名的文件添加扩展名(包括更改.bashrc
为.bashrc.txt
但不触及空行或以 结尾的行/
):
sed 's|\([^/]\)\.[^./]*$|\1|;s|[^/]$|&.txt|'