如何修改此sed awk命令,以使输出进入所选文件?

时间:2019-12-09 07:07:04

标签: awk sed terminal youtube

我正在使用此SO答案https://stackoverflow.com/a/54818581/80353

中的最后一条命令
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "$1";sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}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命令以实现所需的结果?

3 个答案:

答案 0 :(得分:1)

考虑到您想在屏幕上看到输出,也想将输出保存到输出文件中,如果是这种情况,请尝试以下操作。

cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "$1";sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'|tee -a "$2")

以一种非衬里形式使用OR:

cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "$1";\
sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'\
|tee -a "$2")

请确保在变量中提供了完整的路径,例如-> relative_or_absolute_path_of_text_or_markdown_file="/full/path/output_file.txt"等,仅作为示例。我无法测试它,因为我的盒子中没有用于vtt文件的机制。

如果您不想在屏幕上打印信息,而只是想将输出保存到输出文件中,那么正如我上面显示的,@ oguz ismail的注释仅使用tee "$2"而不是tee -a "$2"

答案 1 :(得分:0)

谢谢 @KimStacks @ RavinderSingh13 @ Oguz-Ismail ,以便将这些解决方案发布在上方的post

我设法通过youtube-dl --skip-download --write-auto-sub $youtube_url

.vtt 文件中获得了结果

但是,输出格式对于我的目的而言并不理想。我必须逐行删除才能删除时间以及 / n 新行。因此,我想自定义代码语法以符合我的要求。

注意::不确定是否是新查询,所以我现在将其发布在这里:

  1. 我已经尝试了之前的post和此处建议的所有步骤,但我仍然无法理解:

    •   

      如何在下面的代码中插入“ $ youtube_url”?

    cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "$1";\ sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'\ |tee -a "$2")

  2. 我尝试在'NR%8==1{printf"%s ",$1}NR%8==3'的两端编辑从0到3到-1的数字,但是没有成功在.vtt文件中获取正确的格式。因此,是否可能具有:

    •   

      以字幕形式连续打印的字幕文本,而不是以字幕形式打印的每个字幕?

    •   

      要删除开始时间的打印输出吗?

答案 2 :(得分:0)

对于那些想要用相对路径保存subs文件的人来说,这是一个详细的bash脚本。

结果保存为纯文本,从而节省了时间,换行和其他标记。

#!/bin/bash
# video-cap.sh videoUrl sub.txt

# Download captions only and save in a .vtt file
youtube-dl --skip-download --write-auto-sub "$1";

# 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{$1}NR%8==3' \
  | tr '\n' ' ' > "$2"

# Remove the original .vtt subs file
rm -f "$vtt"