如何在文本文件的第一个空行添加连字符?

如何在文本文件的第一个空行添加连字符?

我正在尝试将三个连字符添加到给定文本文件的第一个空行,并尝试用于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

...不仅会替换带有三个连字符的第一个空行,它还会指示seduitq在找到第一个空行以及其余的空行后立即尝试读取输入文件cat。不过,如果您使用 GNU,sed您将需要使用-unbufferred 开关。

答案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/^$/---/执行任何操作。

相关内容