You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sed:仅替换字符串指定部分空格为下划线的实现问题

嘿,这个问题我刚好碰到过!要保留编号后的第一个空格,把其他空格全换成下划线,用sed其实有个很巧妙的小技巧,或者用awk也能轻松搞定,给你两种方案参考:

方案一:用sed多步替换实现

核心思路是先把第一个空格临时替换成特殊字符,处理完其他空格后再复原,完美避开第一个空格:

sed -e 's/ /@/' -e 's/ /_/g' -e 's/@/ /' your_playlist.txt
  • 第一步's/ /@/':只替换第一个空格为@(选一个文件名里不会出现的字符就行,比如@、#都可以)
  • 第二步's/ /_/g':把剩下的所有空格统一替换成下划线
  • 第三步's/@/ /':把临时替换的@换回空格,这样就精准保留了编号后的那个空格

测试你的示例文件名:

原文件名:1003 James Brown - The Boss Unknown Artist.mp3
处理后:1003 James_Brown_-_The_Boss_Unknown_Artist.mp3

完全符合需求!

方案二:用awk更直观处理

awk的字段分割特性刚好适配这种场景,直接把编号单独分离出来处理,逻辑更清晰:

awk '{
    # 保存第一个字段(歌曲编号)
    num = $1
    # 清空第一个字段,剩下的就是歌曲名称部分
    $1 = ""
    # 把名称里的所有空格替换成下划线
    gsub(/ /, "_")
    # 打印编号+空格+处理后的名称(substr去掉开头多余的空格)
    printf "%s %s\n", num, substr($0, 2)
}' your_playlist.txt

如果后期需要调整文件名规则,awk的写法也更容易修改。

内容的提问来源于stack exchange,提问作者Jürgen Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:44:19