我刚学会了如何在Markdown中进行实际换行,在行尾有两个空格。我有很多文件要转换成这种做法,因为习惯它会让我的生活变得更容易使用像Pandoc这样的Markdown工具。
这些文件目前如下所示:
Roses are red
Violets are blue
Bananas are yellow
Oranges are orange
我想用多行换算段落,以便结果如下:
Roses are red<space><space>
Violets are blue
Bananas are yellow
Oranges are orange
可悲的是,我的linux fu无法完成任务。我有\n
行尾。这是我如何开始它:
for i in \*; do sed -e 's/\n/ /g' "$i"; done
我完全不知道如何区分换行符后跟不应修改的空行(第2行),换行符后跟文本应该由sed(第1行)修改。此外,应忽略空行(第3行)。有人可以帮助我吗?
答案 0 :(得分:1)
为了可靠地执行此操作,您需要一个markdown解析器。 (我相信基于awk的解决方案也会在代码块的行尾插入空格,这是你不想要的。)使用pandoc 1.11.1或更高版本,你可以这样做:
pandoc -fmarkdown_strict+hard_line_breaks -t markdown_strict
请注意,如果您计划将pandoc用作降价处理器,则只需将文件保留原样,并使用markdown+hard_line_breaks
或markdown_strict+hard_line_breaks
作为输入格式。
答案 1 :(得分:0)
xx
来更容易在输出中看到:
kent$ awk '{$0=$0"xx"}7' f
Roses are redxx
Violets are bluexx
xx
Bananas are yellowxx
xx
Oranges are orangexx
因此,每个“新行”将替换为two 'x' with newline
。如果这是你想要的,你可以这样做:
awk '{$0=$0" "}7' file
如果你想忽略空行(对于空行不做任何替换): 看看这个:
kent$ awk '$0{$0=$0"xx"}7' f
Roses are redxx
Violets are bluexx
Bananas are yellowxx
Oranges are orangexx
所以你看到double x
上面的空行没有显示。你可以使用命令:
awk '$0{$0=$0" "}7' file
kent$ awk 'NR==1{p=$0;next}{p=p&&$0?p"xx":p; print p;p=$0}END{print $0}' f
Roses are redxx
Violets are blue
Bananas are yellow
Oranges are orange
检查上面的一行,所有空行和前一行空行都被忽略。该文件的最后一行也被忽略。
答案 2 :(得分:0)
$ awk '
{
if (NF) {
head = tail
tail = "<space><space>"
}
else {
head = ""
tail = ""
}
printf "%s%s%s", head, (NR>1?ORS:""), $0
}
END { print "" }
' file
Roses are red<space><space>
Violets are blue
Bananas are yellow
Oranges are orange
只需将tail = "<space><space>"
更改为tail = " "
。
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed '$!N;/^\s*\n\|\n\s*$/!s/\n/<space><space>&/;P;D file
这样可以在模式空间中保留2行。如果第一行或第二行是空的,即段落的开头或结尾,则打印出第一行不变。但是如果它们不是,那么它会在换行符前面加上所需的字符串。