Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想要完成的是取一个文件名,假设myfileRE.txt并返回myfile.txt. 额外的两个字符将始终是两个字符,所以我尝试做的是:
myfileRE.txt
myfile.txt
${filename%??.}
我的想法是“匹配句号之前出现的 2 个字符并将这些字符撕掉”..不幸的是,它只返回了整个文件名。
我最终这样做了:
${filename%??????}.txt
但这不是很友好,必须有一种更清洁的方法来做到这一点。有什么建议吗?也许有正则表达式的东西?
为了从字符串中间拉出一些东西,您可以使用替换。以下在 bash 中有效:
filename=myfileRE.txt echo "${filename/??./.}"
这与模式“??”相匹配。并将其替换为“。”。它类似于 a perlorsed替换,只是它使用 shell 模式匹配而不是正则表达式。
perl
sed
Jordanm 的方法可能是要走的路,但只是为了多样化
echo "${filename%%??.*}.${filename#*.}"