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%",

これで、以前の方法を使用できます。

関連情報