与えられたテキストファイルの最初の空白行に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つのハイフンに置き換えるだけでなく、最初の空白行と残りの空白行を見つけるとすぐに入力ファイルを読み取るようにsed
uitに指示します。ただし、GNUを使用している場合は、nbufferredスイッチを使用する必要があります。q
cat
sed
-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/^$/---/
機能します。