我正在搜索unix命令/ shell脚本,以删除除了文件扩展名之外的所有文件中_之后发生的字符。
示例:
b6d28保险更新-shop_6b5c74fa3d4b96f7557c3fd66f2555af.png
应重命名为
b6d28保险更新-shop.png
我尝试过在线搜索,但无法找到快速,最佳的解决方案。
请注意,这些额外字符会随机添加,并在每个文件中有所不同。
提前致谢!
答案 0 :(得分:1)
您可以使用否定字符类来使用sed
:
f='b6d28-insurance-renewal-shop_6b5c74fa3d4b96f7557c3fd66f2555af.png'
sed 's/_[^_.]*//' <<< "$f"
b6d28-insurance-renewal-shop.png
[^_.]
匹配除DOT或下划线之外的任何字符。
如果您正在使用bash
,那么您可以使用以下命令在shell中执行此操作:
echo "${f%_*}.png"
答案 1 :(得分:0)
正则表达式:
(\_[\d\w]+)(?=(\.\w{2,3}))
在.ext [ension]
之前找到每个_akfgasfhsgfhha答案 2 :(得分:0)
你也可以使用cut
作为结果:
file="b6d28-insurance-renewal-shop_6b5c74fa3d4b96f7557c3fd66f2555af.png"
new_file=$(echo $file | cut -d'_' -f1).$(echo $file | cut -d'.' -f2)
echo "New file name: ${new_file}"
输出:
New file name: b6d28-insurance-renewal-shop.png
答案 3 :(得分:0)
假设f
保存原始文件名,
${f%_*}.${f##*.}
会给你转换后的文件名。