如何修改此 sed awk 命令以便将输出转到所选文件?
How to modify this sed awk command so that the output goes to a file of choice?
我正在使用这个 SO 答案中的最后一个命令
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "";sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",}NR%8==3'|tee cap)
此命令当前的作用
- 此命令会将 YouTube 视频的字幕下载为 .vtt 文件,并且
- 然后在终端上打印出 .vtt 文件的简化版本
此命令按说明工作。
如何使用这个命令
在终端中我会运行上面的命令一次然后运行cap $youtube_url
我喜欢的东西
我想修改原来的 cap()
函数,使原来的行为保留一个额外的部分
- 此命令会将 YouTube 视频的字幕下载为 .vtt 文件(未更改)
- 然后将 .vtt 文件的简化版本打印到另一个文件中,该文件声明为参数 $2(已更改)
我希望如何调用新命令
原来,我会把原来的命令称为
cap $youtube_url
现在我喜欢这样做
cap $youtube_url $relative_or_absolute_path_of_text_or_markdown_file
如何修改原来的 cap 命令来达到我想要的结果?
考虑到您希望在屏幕上看到输出,也想将输出保存到输出文件中,如果是这种情况,请尝试以下操作。
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "";sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",}NR%8==3'|tee -a "")
或在非单行形式中使用:
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "";\
sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",}NR%8==3'\
|tee -a "")
请确保您在变量中提供了完整路径,例如--> relative_or_absolute_path_of_text_or_markdown_file="/full/path/output_file.txt"
等只是一个示例。我无法测试它,因为我的盒子里没有 vtt 文件等机制。
如果您不想在屏幕上打印信息而只想将输出保存到输出文件中,那么正如@oguz ismail 的评论那样,仅使用 tee ""
而不是 tee -a ""
,如上所示。
谢谢 @KimStacks @RavinderSingh13 @Oguz-Ismail post 在上面和上一个 post
我设法在 .vtt 文件中获得结果 youtube-dl --skip-download --write-auto-sub $youtube_url
但是,输出的格式不适合我的目的。我必须逐行删除以删除时间以及 /n
新行。所以我想自定义代码语法以满足我的要求。
注意:不确定它是否是一个新查询,所以我暂时post它:
- 我已经尝试了之前 post 和此处建议的所有步骤,但我仍然无法理解:
如何在下面的代码中插入“$youtube_url”?
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "";\
sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",}NR%8==3'\
|tee -a "")
- 我尝试在两端编辑
'NR%8==1{printf"%s ",}NR%8==3'
中从 0 到 3 到 -1 的数字,但没有成功地在 .vtt 文件中获得正确的格式。因此,是否有可能:
转录文本连续打印成句子,而不是每个副标题都打印成新行?
删除开始时间的打印输出?
这里有一个详细的 bash 脚本,供那些想要使用相对路径保存 subs 文件的人使用。
结果保存为纯文本,删除时间、换行和其他标记。
#!/bin/bash
# video-cap.sh videoUrl sub.txt
# Download captions only and save in a .vtt file
youtube-dl --skip-download --write-auto-sub "";
# Find .vtt files in current directory created within last 3 seconds, limit to 1
vtt=$(find . -cmin -0.05 -name "*.vtt" | head -1)
# Extract the subs and save as plaintext, removing time, new lines and other markup
sed '1,/^$/d' "$vtt" \
| sed 's/<[^>]*>//g' \
| awk -F. 'NR%8==1{}NR%8==3' \
| tr '\n' ' ' > ""
# Remove the original .vtt subs file
rm -f "$vtt"
我正在使用这个 SO 答案中的最后一个命令
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "";sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",}NR%8==3'|tee cap)
此命令当前的作用
- 此命令会将 YouTube 视频的字幕下载为 .vtt 文件,并且
- 然后在终端上打印出 .vtt 文件的简化版本
此命令按说明工作。
如何使用这个命令
在终端中我会运行上面的命令一次然后运行cap $youtube_url
我喜欢的东西
我想修改原来的 cap()
函数,使原来的行为保留一个额外的部分
- 此命令会将 YouTube 视频的字幕下载为 .vtt 文件(未更改)
- 然后将 .vtt 文件的简化版本打印到另一个文件中,该文件声明为参数 $2(已更改)
我希望如何调用新命令
原来,我会把原来的命令称为
cap $youtube_url
现在我喜欢这样做
cap $youtube_url $relative_or_absolute_path_of_text_or_markdown_file
如何修改原来的 cap 命令来达到我想要的结果?
考虑到您希望在屏幕上看到输出,也想将输出保存到输出文件中,如果是这种情况,请尝试以下操作。
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "";sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",}NR%8==3'|tee -a "")
或在非单行形式中使用:
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "";\
sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",}NR%8==3'\
|tee -a "")
请确保您在变量中提供了完整路径,例如--> relative_or_absolute_path_of_text_or_markdown_file="/full/path/output_file.txt"
等只是一个示例。我无法测试它,因为我的盒子里没有 vtt 文件等机制。
如果您不想在屏幕上打印信息而只想将输出保存到输出文件中,那么正如@oguz ismail 的评论那样,仅使用 tee ""
而不是 tee -a ""
,如上所示。
谢谢 @KimStacks @RavinderSingh13 @Oguz-Ismail post 在上面和上一个 post
我设法在 .vtt 文件中获得结果 youtube-dl --skip-download --write-auto-sub $youtube_url
但是,输出的格式不适合我的目的。我必须逐行删除以删除时间以及 /n
新行。所以我想自定义代码语法以满足我的要求。
注意:不确定它是否是一个新查询,所以我暂时post它:
- 我已经尝试了之前 post 和此处建议的所有步骤,但我仍然无法理解:
如何在下面的代码中插入“$youtube_url”?
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "";\ sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",}NR%8==3'\ |tee -a "")
- 我尝试在两端编辑
'NR%8==1{printf"%s ",}NR%8==3'
中从 0 到 3 到 -1 的数字,但没有成功地在 .vtt 文件中获得正确的格式。因此,是否有可能:
转录文本连续打印成句子,而不是每个副标题都打印成新行?
删除开始时间的打印输出?
这里有一个详细的 bash 脚本,供那些想要使用相对路径保存 subs 文件的人使用。
结果保存为纯文本,删除时间、换行和其他标记。
#!/bin/bash
# video-cap.sh videoUrl sub.txt
# Download captions only and save in a .vtt file
youtube-dl --skip-download --write-auto-sub "";
# Find .vtt files in current directory created within last 3 seconds, limit to 1
vtt=$(find . -cmin -0.05 -name "*.vtt" | head -1)
# Extract the subs and save as plaintext, removing time, new lines and other markup
sed '1,/^$/d' "$vtt" \
| sed 's/<[^>]*>//g' \
| awk -F. 'NR%8==1{}NR%8==3' \
| tr '\n' ' ' > ""
# Remove the original .vtt subs file
rm -f "$vtt"