私は何をすべきかを追加/追加する方法を知っています。
sed -i '/pattern/a new thing!'
ちなみに、1行にマッチさせ、その前に2行追加します。
awk
Ubuntu 12.04でデフォルトで利用可能なツールにツールを制限したいと思います。それが適切かどうかわかりません。
問題Bの解決策を探している間に問題Aを解決する必要がある場合に備えて、.m3u8ファイルからの抜粋は次のとおりです。
#EXTINF:4.304300,
output-000.ts
#EXTINF:5.705700,
output-001.ts
#EXTINF:4.304300,
output-002.ts
#EXTINF:5.705700,
output-003.ts
今私の目標は、各X'番目の前に2行を挿入することですoutput-XXX.ts
。たとえば、次のように実装したいと思います。
#Inserted line 0
#EXTINF:4.304300,
output-000.ts
#EXTINF:5.705700,
output-001.ts
#Inserted line 1
#EXTINF:4.304300,
output-002.ts
#EXTINF:5.705700,
output-003.ts
ベストアンサー1
使用awk
(Ubuntuを含むPOSIXシステムにデフォルトでインストールされています):
POSIXLY_CORRECT=1 awk -v X=2 '
NR >= 2 && /^output-[0-9]{3}\.ts$/ && ++n % X == 1 {
print "#Inserted line", i++
}
NR>1 {print last}
{last = $0}
END{if (NR) print last}' < file.in > file.out
上記2行の内容です。上記のN行にまとめられています。
POSIXLY_CORRECT=1 awk -v N=2 -v X=2 '
BEGIN{N--}
NR > N {
if (/^output-[0-9]{3}\.ts$/ && ++n % X == 1)
print "#Inserted line", i++
print l[NR % N]
}
{l[NR % N] = $0}
END{
for (i = NR > N ? NR - N + 1 : 1; i <= NR; i++) print l[i % N]
}'