gpt4 book ai didi

regex - Bash 脚本解析文件以在模式之间多次出现字符串

转载 作者:行者123 更新时间:2023-12-04 04:38:51 25 4
gpt4 key购买 nike

我正在做很少的文本处理以在用户上传的 html 文件中查找视频内容。所以我们定义了一个名为“video”的标签,用户应该把视频文件像

<video> abcd.mp4 </video>

目前我正在使用 awk 提取具有视频标签的行,
str=$(awk '/<video>/{flag=1;} /<\/video>/{print ;flag=0} flag { print }' file.html)

输出也包含标签,所以我删除前缀和后缀以获得视频文件名。它是这样完成的,
prefix="<video>"
suffix="</video>"
foo=${str#$prefix}
foo=${foo%$suffix}

但这仅适用于仅使用一次视频标签的文件。对于多次使用标签的文件,awk 返回的字符串从 <video> 的第一次出现开始。直到最后一次出现 </video> .

所以我的问题是我应该如何编写一个脚本,在它的末尾给我一个包含 <video> 之间所有字符串的数组。和 </video>标记。另外我该如何更改
<video> abcd.mp4 </video>


<media> abcd.mp4 </media>.

最佳答案

要单独获取每个标签:

grep -Eo "<video>(.+?)</video>" myfile.html

只获取标签中的文本:
grep -Eo "<video>(.+?)</video>" myfile.html | sed -E "s|</?video>||g"

如果开始和结束标签在不同的行上:
tr "\n" " " < myfile.html | grep -Eo "<video>(.+?)</video>" | sed -E "s|</?video>||g"

示例输入:
This is a <video> video1.mp4 </video>  file with <other> <random> </tags>
<media> media1.mp4 </media>
<video> video2.mp4 </video>
<media> media 2 with spaces
and over
multiple lines.mp4 </media>

示例输出:
video1.mp4 
video2.mp4

要同时获得 videomedia标签(请在您的原始问题中指定):
tr "\n" " " < vid.html | grep -Eo "<(video|media)>(.+?)</(video|media)>"  | sed -E "s#</?(video|media)>##g"

输出:
 video1.mp4 
media1.mp4
video2.mp4
media 2 with spaces and over multiple lines.mp4

对于您的第二个问题,请通过以下命令运行整个文件:
sed -E "s|(</?)video>|\1media>|g" vid.html

关于regex - Bash 脚本解析文件以在模式之间多次出现字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19228398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com