gpt4 book ai didi

linux - Bash 替换文件名的正确部分

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:35 25 4
gpt4 key购买 nike

我无法在 bash 中重命名文件名。

我的文件名模式是这样的:

“一些文本模式 trashtext.ext”

我想保留一些文本并用其他内容替换 pattern 和 trashtext。sometext 具有可变长度并且可能包含空格,模式是唯一的,而 trashtext 具有可变长度并且可能包含特殊字符,如'[',这些字符可以用 sed 很好地处理。"sometext pattern trashtext.ext"=> "sometext myreplacement"

我找到了解决方案,但我想还有更好的方法:去掉 trashtext 中的特殊字符:

rename 'y/\[/ /' *.ext

获取要删除的部分:

var=$(ls | grep -Po 'pattern[^/]+')

用sed删除它:

sed "s/$var/blabla/"

谢谢你的帮助

最佳答案

像这样尝试:

pattern=somepattern
replacement=somereplacement
ext=ext
rename "s/$pattern.*?\.$ext$/$replacement.$ext/" *.$ext

.*? 应该匹配模式和扩展名之间的“垃圾文本”,并将其替换为替换项。 trashtext 是否包含特殊字符并不重要。

如果,作为替换,你想使用与模式匹配的任何东西,你可以这样做:

rename "s/($pattern).*?\.$ext$/\$1.$ext/" *.$ext

最后,最好在使用语法时使用 -n 标志。这样命令将只显示它会做什么而不是真正去做:

rename -n "s/($pattern).*?\.$ext$/\$1.$ext/" *.$ext

关于linux - Bash 替换文件名的正确部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com