首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bash (macos)更改包含字符串的部分行

使用bash (macos)更改包含字符串的部分行
EN

Unix & Linux用户
提问于 2021-10-03 07:15:25
回答 2查看 84关注 0票数 0

我需要识别包含字符串‘’的音乐播放列表文件.m3u中的行,并通过特定的更改更新这些行。

例如:

/music/Miles Davis/1959 - Kind of Blue [LD]/Miles Davis - So What.mp3

需要成为:

/music/_lossless/Miles Davis/1959 - Kind of Blue/Miles Davis - So What.mp3

即。字符串'_lossless/‘被插入在'/ music /’之后,字符串‘’将从音乐文件路径中删除。

我使用for循环文件,因为有许多其他进程需要在每个文件上执行。

代码语言:javascript
复制
for f in *.m3u;
    do

    # I can identify the lines using:
    fgrep -n "[LD]" "$f"
    
    # I can grab the line number using:
    ld_line=$(fgrep -c "[LD]" "$f")

    # and have tried processing the changes using sed, but it is not working..
    #sed "$ld_lines![LD]!!" "$f"

    # Ive also tried using sed as follows:
    sed '![LD]!s!music!music/_lossless!' "$f"

    # but neither of the above approaches either work or handle both modifications

  done

解决方案不一定要使用sed,无论最好的是什么。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2021-10-03 07:41:54

代码语言:javascript
复制
sed '/ \[LD\]/ { s///; s,/,/_lossless/,2; }' file

要在包含子字符串[LD]的文件中查找行,可以在sed中使用正则表达式/ \[LD\]/[需要转义才能失去正则表达式中的特殊含义。我们不需要转义],但为了对称性,我们会转义它。

一旦找到了带有[LD]子字符串的行,就可以用替换s///替换该字符串,即删除它。使用空正则表达式将重复使用最近的表达式,最近的表达式是匹配的[LD]

下一个替代是用字符串/替换第二个/_lossless/。我们在行的末尾使用2选择正则表达式D12的第二个匹配项,并为命令使用逗号分隔符而不是斜杠。

在创建带有.new文件后缀的文件的循环中:

代码语言:javascript
复制
for name in *.m3u; do
    sed '/ \[LD\]/ { s///; s,/,/_lossless/,2; }' -- "$name" >"$name".new
done

若要更改macOS上的文件,请使用sed -i '' ...

代码语言:javascript
复制
for name in *.m3u; do
    sed -i '' '/ \[LD\]/ { s///; s,/,/_lossless/,2; }' -- "$name"
done

在测试破坏性命令之前请记住备份数据.

票数 0
EN

Unix & Linux用户

发布于 2021-10-03 10:48:31

你可以试试这个sed

代码语言:javascript
复制
for f in *.mp3; do
    var1=$(sed -E 's|(.[^/]*)(.[^[]*).*](.*)|\1/_lossless\2\3|' "$f")
    mv "$f" "var1"
done

输出

代码语言:javascript
复制
/music/_lossless/Miles Davis/1959 - Kind of Blue /Miles Davis - So What.mp3
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/671610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档