如何修改此 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)

此命令当前的作用

  1. 此命令会将 YouTube 视频的字幕下载为 .vtt 文件,并且
  2. 然后在终端上打印出 .vtt 文件的简化版本

此命令按说明工作。

如何使用这个命令

在终端中我会运行上面的命令一次然后运行cap $youtube_url

我喜欢的东西

我想修改原来的 cap() 函数,使原来的行为保留一个额外的部分

  1. 此命令会将 YouTube 视频的字幕下载为 .vtt 文件(未更改)
  2. 然后将 .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它:

  1. 我已经尝试了之前 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 "")
    
  1. 我尝试在两端编辑 '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"