1

我想要完成的是取一个文件名,假设myfileRE.txt并返回myfile.txt. 额外的两个字符将始终是两个字符,所以我尝试做的是:

${filename%??.}

我的想法是“匹配句号之前出现的 2 个字符并将这些字符撕掉”..不幸的是,它只返回了整个文件名。

我最终这样做了:

${filename%??????}.txt

但这不是很友好,必须有一种更清洁的方法来做到这一点。有什么建议吗?也许有正则表达式的东西?

4

2 回答 2

6

为了从字符串中间拉出一些东西,您可以使用替换。以下在 bash 中有效:

filename=myfileRE.txt
echo "${filename/??./.}"

这与模式“??”相匹配。并将其替换为“。”。它类似于 a perlorsed替换,只是它使用 shell 模式匹配而不是正则表达式。

于 2013-09-12T17:41:56.353 回答
5

Jordanm 的方法可能是要走的路,但只是为了多样化

echo "${filename%%??.*}.${filename#*.}"
于 2013-09-12T17:44:10.570 回答