如何从 bash 中的文件名中删除特定字符串
How to delete specific string from filename in bash
我有一个名为 "Some Text - Full Score_0.png" 的文件,我需要从中删除“- Full Score”部分,并将 "Some Text" 中的所有剩余空格替换为“-”。
我可以使用 tr ' ' '-'
删除所有空格
我需要输出为 "some-text_0.png"...
有没有人有想法,如何解决?
可以使用参数扩展:
#!/bin/bash
in='Some Text - Full Score_0.png'
expected='some-text_0.png'
out=${in/ - Full Score} # Replace
out=${out// /-} # Replace everywhere
out=${out,,} # Lowercase all
[[ $expected == $out ]] && echo ok
我已经找到解决方法了!
"$file" | cut -d- -f1 | sed 's/.$//' | tr ' ' '-'
如果您发现其他更好的解决方案,请告诉我。
有一个名为 rename 的简洁命令行实用程序。它默认出现在 Ubuntu 中,但也可用于 Mac。
它的工作方式类似于 sed(1)
,但文件名:
$ touch 'Some Text - Full Score_0.png'
$ ls
Some Text - Full Score_0.png
$ rename -e 's/ - Full Score//; s/ /-/g; y/A-Z/a-z/' Some\ Text\ -\ Full\ Score_0.png
$ ls
some-text_0.png
s/ - Full Score//
删除有问题的文本。
s/ /-/g
用连字符替换空格。
y/A-Z/a-z/
将所有字母小写。
我有一个名为 "Some Text - Full Score_0.png" 的文件,我需要从中删除“- Full Score”部分,并将 "Some Text" 中的所有剩余空格替换为“-”。
我可以使用 tr ' ' '-'
我需要输出为 "some-text_0.png"...
有没有人有想法,如何解决?
可以使用参数扩展:
#!/bin/bash
in='Some Text - Full Score_0.png'
expected='some-text_0.png'
out=${in/ - Full Score} # Replace
out=${out// /-} # Replace everywhere
out=${out,,} # Lowercase all
[[ $expected == $out ]] && echo ok
我已经找到解决方法了!
"$file" | cut -d- -f1 | sed 's/.$//' | tr ' ' '-'
如果您发现其他更好的解决方案,请告诉我。
有一个名为 rename 的简洁命令行实用程序。它默认出现在 Ubuntu 中,但也可用于 Mac。
它的工作方式类似于 sed(1)
,但文件名:
$ touch 'Some Text - Full Score_0.png'
$ ls
Some Text - Full Score_0.png
$ rename -e 's/ - Full Score//; s/ /-/g; y/A-Z/a-z/' Some\ Text\ -\ Full\ Score_0.png
$ ls
some-text_0.png
s/ - Full Score//
删除有问题的文本。
s/ /-/g
用连字符替换空格。
y/A-Z/a-z/
将所有字母小写。