我有许多文件具有以下格式:
misty mountains - final chapter-84jdodljdjlm.mp3
misty mountains - first chanpt-4jd0843l8.mp3
misty mountains - (final chapter) - fj084j4.mp3
我希望第一个-
之前的所有文字和第二个-
之前的所有文字。如何从文件名中提取此文本?或者最好在第二个-
之后和.mp3
答案 0 :(得分:1)
这个awk单行可以帮助你:
awk -F- '{print $1,$2}'
用你的文字测试:
kent$ echo "misty mountains - final chapter-84jdodljdjlm.mp3
misty mountains - first chanpt-4jd0843l8.mp3
misty mountains - (final chapter) - fj084j4.mp3"|awk -F- '{print $1,$2}'
misty mountains final chapter
misty mountains first chanpt
misty mountains (final chapter)
要列出所有文件,您可以尝试ls -1 *.mp3|awk ...
解决方案不是一般的解决方案,但我想这对您的要求很有帮助。
答案 1 :(得分:1)
您可以使用Bash的内置参数扩展来从shell glob中删除部分文件名。例如
for file in *mp3; do
echo "${file%-*}"
done
如果要重命名文件,而不是仅捕获或打印修改后的文件名,那么您可以将循环更改为以下内容而不是回显:
for file in *mp3; do
mv "$file" "${file%-*}.mp3"
done
您可以提前测试一下,看看结果会是什么样子。例如:
files=(
'misty mountains - final chapter-84jdodljdjlm.mp3'
'misty mountains - first chanpt-4jd0843l8.mp3'
'misty mountains - (final chapter) - fj084j4.mp3'
)
for file in "${files[@]}"; do echo "${file%-*}"; done
misty mountains - final chapter
misty mountains - first chanpt
misty mountains - (final chapter)
答案 2 :(得分:0)