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%",
これで、以前の方法を使用できます。