用 sed 解析问题

用 sed 解析问题

我有一个文本文件,0test.txt其中包含以下代码片段。 (它有几个 http 和 https url 链接,但这些行将其单独列出)

player.setup({
  file: 'http://website.com/site/myStream/playlist.m3u8?wmsAuthSign=c2VydmVyXs',
  width: "100%",
  aspectratio: "16:9",

});

我可以运行sed命令:

cat /tmp/0test.txt | sed -n -e "/^ *file: */ { s/^ *file: *'//; s/', *$//p}"

并返回正确的 URL 链接:

http://website.com/site/myStream/playlist.m3u8?wmsAuthSign=c2VydmVyXs

但是当文件0test.txt看起来像这样时:

player.setup({
          file: 
'http://website.com/site/myStream/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9MTIvNC8yMDE5IDk6MTY6NTggUE0maGFzaF92YWx1ZT16RXpiUWowQ0V4TDJER3ExQnFZTEd3PT0mdmFsaWRtaW51dGVzPTM2MCZzdHJtX2xlbj0w',
          width: "100%",
          aspectratio: "16:9",
            aspectratio: "16:9"

    });

我没有得到任何回报。我怎样才能解决这个问题?

答案1

对于这种特定情况,grep可能更有用。第一步,line:搜索流行语,并将以下行添加到输出中。然后使用 URL 本身进行选择grep,最后sed删除尾随的单引号和逗号:

grep -A 1 'file:' <infile(s)> | grep -oE 'http.*' | sed "s:',$::" 

答案2

在正则表达式中,您允许在冒号后使用任意数量的空格字符(“file: *”)。您可能希望将其扩展为通用空白字符(“\s”),以便换行符和制表符被视为“像空格一样”。

答案3

快速修复。

cat /tmp/0test.txt|sed ':a;N;$!ba;s/file:\s*\n/file: /g;'

该行将以以下方式转换文件:以“file:”结尾的每一行(末尾有或没有额外空格)将与其后面的行合并。

这样,文本

player.setup({
          file: 
'http://website.com/site/myStream/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9MTIvNC8yMDE5IDk6MTY6NTggUE0maGFzaF92YWx1ZT16RXpiUWowQ0V4TDJER3ExQnFZTEd3PT0mdmFsaWRtaW51dGVzPTM2MCZzdHJtX2xlbj0w',
          width: "100%",

将转变为

player.setup({
          file: 'http://website.com/site/myStream/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9MTIvNC8yMDE5IDk6MTY6NTggUE0maGFzaF92YWx1ZT16RXpiUWowQ0V4TDJER3ExQnFZTEd3PT0mdmFsaWRtaW51dGVzPTM2MCZzdHJtX2xlbj0w',
          width: "100%",

现在你可以使用你的旧方法了。

相关内容