首页 > 解决方案 > Grep 失败并给出奇怪的输出

问题描述

我有一个非常简单的脚本,可以在包含我所有音乐的 plex 播放列表中查找歌曲,并从现有的 m3u 文件创建一个 plex 播放列表:

#!/bin/bash
file=$(echo $1)
echo Doing "$file"
echo "-----"
echo "#EXTM3U" >> Plex/"$file"8
echo "#Written by WebTools for Plex" >> Plex/"$file"8
echo '#{"playlistType": "audio", "title": "Music", "leafCount": "13474", "content": null, "ServerID": "8854525f8d9eb2bac12228bb9ab2a6142eb933aa", "smart": "0"}' >> Plex/"$file"8
echo "#" >> Plex/"$file"8
echo "#" >> Plex/"$file"8
while read p ; do
if grep -q "$p" ~/Downloads/Music.m3u8; then
    grep -B 2 "$p" ~/Downloads/Music.m3u8 >> Plex/"$file"8
else
    echo "$p" not found.
    echo "$p" >> "$file".notfound
fi
done < "$file"
echo "-----"

到目前为止,这已经在约 15 个播放列表和约 1500 首歌曲上运行顺利 - 但是在这个新批次上运行时我得到了一些奇怪的输出。

有效的播放列表具有如下结构:

/home/shared/plex/Music/Video Game - PC/Cave Story/On To Grasstown.mp3
/home/shared/plex/Music/Video Game - PC/Cave Story/Eyes Of Flame (Boss Theme #2).mp3
/home/shared/plex/Music/Video Game - PC/Cave Story/Cave Story (Plantation   Main Theme).mp3

以及不具有完全相同结构的新播放列表:

/home/shared/plex/Music/Liz Callaway/Anastasia/Once Upon A December.mp3
/home/shared/plex/Music/Liz Callaway/Anastasia/Journey To The Past.mp3
/home/shared/plex/Music/Phil Collins, 'N Sync/Tarzan/Trashin' The Camp.mp3

旧的播放列表没有任何未找到的条目,但新的每个条目都找不到,但它看起来像这样:

 not found.d/plex/Music/Elton John/The Road To El Dorado/Queen Of Cities.mp3
 not found.d/plex/Music/Mandy Moore & Zachary Levi/Tangled/I See The Light.mp3
 not found.d/plex/Music/Randy Newman/Toy Story/You've Got A Friend In Me.mp3

我知道它在某种程度上没有击中 grep 但输出不应该将“未找到”放在“共享”的中间

我能够成功地将文件中的每一行 grep 到 ~/Downloads/Music.m3u8。肯定有什么不对劲。有任何想法吗?

标签: bashgrep

解决方案


推荐阅读