我有一个文本文件,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%",
现在你可以使用你的旧方法了。