bash - 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。肯定有什么不对劲。有任何想法吗?
解决方案
推荐阅读
- python - 如何将嵌套在 Request 中的 Json 提取到 Pandas DataFrame 中
- c# - 将浮动选项卡与主窗口分开处理的功能
- python - GF(2) 上矩阵秩的快速计算
- python - 如何在单个数据框中一次连接熊猫中的 35 列?
- function - 如何在 Rust 中动态构建具有不同数量参数的函数调用?
- reactjs - 如何使用 GoCD 的 GO_REVISION 将 git 哈希放入我的 ReactJs 应用程序
- html - 用 postgres 数据库信息填充 xhtml 表
- python - 使用 nltk word_tokenize 进行标记后重新加入原始句子
- android - 用于 android 开发的 IntelliJ IDEA 属性部分在哪里?
- java - SpringFox:枚举数组显示为字符串数组