テキストファイルの最初の空白行にハイフンを追加するには?

テキストファイルの最初の空白行にハイフンを追加するには?

与えられたテキストファイルの最初の空白行に3つのハイフンを追加しようとしており、これをsedこの目的に使用したいと思います。私の初期ファイル(MultiMarkdownファイル)は次のとおりです。

title: "Ch. 1: Unparticipated Causality"
author: Jonathan Greig
biblio-files: bibliography.bib
biblio-style: chicago-authordate
mainfont: Linux Libertine O
linestretch: 1.5
documentclass: article
geometry: margin=1in
citecolor: black
linkcolor: black

## Ch 1: Unparticipated Causality ##

linkcolor: blackとの間に## Ch 1 ... ##ダッシュ()を追加してみました---。これを行う方法がわかりません。次のコマンドはまだ機能しません。

sed '/^$/a ---' Chapter1Rev4.md

現在の結果は「コマンドは\の後にテキストが続きます」で、バックスラッシュを追加する方法やハイフン/ダッシュをエスケープする方法がわかりません。

答え1

{ sed -e/./b -es/$/---/\;q; cat; } <in >out

...最初の空白行を3つのハイフンに置き換えるだけでなく、最初の空白行と残りの空白行を見つけるとすぐに入力ファイルを読み取るようにseduitに指示します。ただし、GNUを使用している場合は、nbufferredスイッチを使用する必要があります。qcatsed-u

答え2

努力する

sed 's/^$/---/' Chapter1Rev4.md

すべての空白行に対してこれを行います。まず、awk次のように使用します。

cat Chapter1Rev4.md | awk '{ if ($0 == "") { n++; if (n<2) print "---"; else print $0 } else print $0}'

(または出力を添付された新しいファイルにリダイレクトする> newfile

答え3

その他sed:

sed -e '/^$/{
  s/$/---/
  t1
}' -e:1 -en\;b1 <file

答え4

そして a次のようになります。

sed '0,/^$/{
/^$/a \
---    
}' yourfilename

または追加の代わりに交換したい場合:

sed '0,/^$/{s/^$/---/}' yourfilename

sedスクリプト - 明確にするため

# from the first line through the first empty line
0,/^$/{
  # no \ needed here, just append it
  /^$/a ---
}

または

# from the first line through the first empty line
0,/^$/{
   # replace empty lines with `---'
   s/^$/---/
}

これは、ブロックのアドレスがこれを特定の範囲(最初の行から最初の空の改行まで)に制限し、ブロックが閉じた行でしか行えないためにs/^$/---/機能します。

関連情報