私はLinuxの世界に初めて触れ、助けが必要です。 2つのファイルがあります。
次の文字列を含むtoken.txtファイル:xd2111Vf124FfmrfJ22fag
以下を含むプレイリスト.m3uファイル:
EXTM3U
EXTINF:-1,Channel 1
EXTVLCOPT:network-caching=1000
http://myurl.com/index.m3u8?token=nd2451SVf124dfKwJ22sds
EXTM3U
EXTINF:-1,Channel 2
EXTVLCOPT:network-caching=1000
http://myurl.com/index2.m3u8?token=nd2451SVf124dfKwJ22sds
このファイルのすべてのトークン値を更新されるtoken.txtファイルの内容に置き換えるにはどうすればよいですか?すべての答えに感謝します...
bashスクリプトを作成し、後でcrontabを使用して自動化したいと思います。
答え1
使用sed
:
sed "/^http/s/=.*/=$(<token.txt)/" playlist.m3u
与えられた例では、これが生成されます
EXTM3U
EXTINF:-1,Channel 1
EXTVLCOPT:network-caching=1000
http://myurl.com/index.m3u8?token=xd2111Vf124FfmrfJ22fag
EXTM3U
EXTINF:-1,Channel 2
EXTVLCOPT:network-caching=1000
http://myurl.com/index2.m3u8?token=xd2111Vf124FfmrfJ22fag
このsed
コマンドは、最初に次から始まるすべての行を検索し、その行の最初の行の後のhttp
すべて=
の内容をファイルの内容に置き換えますtoken.txt
(ファイルには1行に新しいタグのみを含める必要があります)。
これは$(<token.txt)
、シェルが置換の代替部分内で命令置換を拡張できるようにすることによって達成される。これにより、ファイルの内容が式sed
に挿入されます。
ファイルを適切に更新するには、そのsed
オプション-i
を使用するか、出力を新しいファイルにリダイレクトして名前を変更します。
sed "/^http/s/=.*/=$(<token.txt)/" playlist.m3u >new && mv new playlist.m3u
^
fromを削除すると、最初だけでなく行^http
のどこにでもsed
表示されます。 URLの前にデータがある場合は削除してください。http
^