【发布时间】:2020-12-23 03:29:00
【问题描述】:
我正在尝试从 json 文件 youtube-dl 中提取信息,并将其中的一些信息 grep 到 .txt 文件中。
下载视频时 youtube-dl 的输出示例。
[info] Writing video description to: /Users/ACCOUNT/Downloads/Rick Astley - Never Gonna Give You Up (Video).description
[info] Writing video description metadata as JSON to: /Users/ACCOUNT/Downloads/Rick Astley - Never Gonna Give You Up (Video).info.json
我的想法
- Grep .json 和 .description 文件路径,以便在以后的 grep 命令中使用。
- 运行以下脚本的工作版本,它会在 .description 文件中添加描述文本上方的新文本。
- (将 .description 重命名为 .txt)
我更喜欢这种方法,因为 youtube-dl 只需要运行一次。
如果有其他通用命令可以在 mac 和 Linux 上使用 grep 来简化操作,那么我认为使用它们代替 grep 没有问题。
问题
- 如何 grep 文件路径并在下面脚本示例中描述的其他命令中使用它?
- 如何运行下面的脚本,但在该文本文件中的当前描述文本上方添加所有信息?
- 当它从 json 文件中获取信息时,它也会在前后获取 "。因此视频名称变为:
"VIDEO NAME",但只需要VIDEO NAME。 - 如何从 json 文件中 grep TAGS?标签在 .json 文件中如下所示:
"tags": ["music", "video", "classic"]。想得到"music", "video", "classic"。
脚本示例
txtfile="$GREP_DESCRIPTION_FROM_YOUTUBE-DL_OUTPUT"
jsonfile="$GREP_JSON_FROM_YOUTUBE-DL_OUTPUT"
echo TITLE >> $txtfile
grep -o '"title": *"[^"]*"' $jsonfile | grep -o '"[^"]*"$' >> $txtfile
echo \ >> $txtfile
echo CHANNEL >> $txtfile
grep -o '"uploader": *"[^"]*"' $jsonfile | grep -o '"[^"]*"$' >> $txtfile
echo \ >> $txtfile
echo CHANNEL URL >> $txtfile
grep -o '"uploader_url": *"[^"]*"' $jsonfile | grep -o '"[^"]*"$' >> $txtfile
echo \ >> $txtfile
echo UPLOAD DATE >> $txtfile
grep -o '"upload_date": *"[^"]*"' $jsonfile | grep -o '"[^"]*"$' >> $txtfile
echo \ >> $txtfile
echo TAGS >> $txtfile
grep -o '"tags": *"[^"]*"' $jsonfile | grep -o '"[^"]*"$' >> $txtfile
echo \ >> $txtfile
echo URL >> $txtfile
echo $url >> $txtfile
echo \ >> $txtfile
echo DESCRIPTION >> $txtfile
【问题讨论】:
-
不要使用
grep处理JSON。使用jq。
标签: json bash youtube grep youtube-dl