ファイル全体のパターンに一致する次の行の先頭に文字を追加します。

ファイル全体のパターンに一致する次の行の先頭に文字を追加します。

テストファイル:

cat Test.txt
#EXTM3U

#EXTINF:100
a.flac

#EXTINF:20
b.flac

予想される結果

cat Test.txt
#EXTM3U

#EXTINF:100
#a.flac

#EXTINF:20
#b.flac

実験1

sed -e '/^#EXTINF/a #'  Test.txt
#EXTM3U

#EXTINF:100
#
a.flac

#EXTINF:20
#
b.flac

提案?

#私の実験では、追加したくない新しい行を追加して追加しました。

答え1

$ sed -e '/^#EXTINF/{n;s/^/#/;}' Test.txt
#EXTM3U

#EXTINF:100
#a.flac

#EXTINF:20
#b.flac

どこ

  • nパターンスペース(この場合は一致する行^#EXTINF)を印刷してから読み込みます。Nパターン空間への入力の外部ライン
  • s/^/#/ S#新しく読んだ行の先頭で置き換え

答え2

そしてawk

awk '{print} /^#EXTINF/ && (getline > 0) {print "#" $0}' file

目的の行を印刷してパターンをテストします。パターンが一致すると、getline処理する次の行を取得するために呼び出しが行われます。また&& getline、一致する場合は、最後の行を再印刷しないように、次の行が存在し、まだファイルの終わりに達していないことをテストするために使用されます。


またいいえgetline

awk 'p{$0 = "#" $0; p=0} /^#EXTINF/{p=1} {print}' file

パターンが見つかったら、フラグ(p)を使用して設定します。内部では、p=0フラグが設定されている次の行でのみフラグを使用できますp{...}

関連情報