Bash 问题:sed 命令将'C:Music'替换为 '~/Desktop/music'



输入

我有一个播放列表文件似乎

#file 1: i.m3u
C:UserscurlyweiMusic........a.mp3
C:UserscurlyweiMusic........b.mp3
#file 2: j.m3u
C:UserscurlyweiMusic........x.mp3

以上文件位于同一文件夹中。

预期输出

#file 1: i.m3u
~/Desktop/Music/......./a.mp3
~/Desktop/Music/......./b.mp3
#file 2: j.m3u
~/Desktop/Music/......./x.mp3

命令我做

for i in $(ls *.m3u| tr 'n' ' '); do sed 's##/#g' -e 's#C:/Users/curlywei/Music#~/Desktop/music#g' $i; done

实际结果

#file 1: i.m3u
C:/Users/curlywei/Music/......../a.mp3
C:/Users/curlywei/Music/......../b.mp3
#file 2: j.m3u
C:/Users/curlywei/Music/......../x.mp3

只有/取代

类似于:

for file in *.m3u; do
printf "%sn" '1,$s!/^C:\Userscurlywei!~/Desktop!` '1,$s!\!/!g' w | ed -s "$file"
done

对于每个文件,用ed(文件编辑器,而不是流编辑器sed(打开它,在每一行上,首先替换前导路径,然后用正斜杠替换所有反斜杠,最后保存文件。

查看for f in $(ls *.mp3)错误的原因。

最新更新