我正在尝试将三个连字符添加到给定文本文件的第一个空行,并尝试用于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
目前的结果是“命令 a 需要 \ 后跟文本”,并且不确定如何添加反斜杠或如何转义连字符/破折号。
答案1
{ sed -e/./b -es/$/---/\;q; cat; } <in >out
...不仅会替换带有三个连字符的第一个空行,它还会指示sed
uitq
在找到第一个空行以及其余的空行后立即尝试读取输入文件cat
。不过,如果您使用 GNU,sed
您将需要使用-u
nbufferred 开关。
答案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/^$/---/
执行任何操作。