我知道我已经问过这个问题,但我没有得到有效的答案。那么请问有人可以回答我的问题吗?
我有一个文本文件,其中包含文本段落,每个段落由一个空行分隔。现在我需要用自己的编号对每个段落进行编号。因此,第一段的页边距中将有数字 1,第二段的页边距中将有数字 2,第三段的页边距中将有数字 3,等等。我知道这似乎很明显,但我认为我的上一篇文章可能没有清楚地传达信息。
所以我需要一个可以完成这项工作的 Linux 命令。然而,我的问题是命令需要简单。我的意思是没有复杂的 Perl 脚本或任何难以理解的代码块。
我正在寻找的是一个可以轻松执行任务的简单命令。或者,如果需要编写脚本,请使其简单并解释代码,以便从未使用过 Perl 或 Bash 脚本的人仍然可以将其应用到他们的代码中并理解他们在做什么。
很抱歉,如果这个问题可能会显得不礼貌。我们将非常感谢您的回复,因为网上没有任何关于此主题的内容。
答案1
全部获得自https://superuser.com/a/916248/151431
您可以使用perl
$ perl -00pe 's/^/$./' file
-00
打开段落模式,其中“行”由连续的 \n\n 定义。-p
告诉 perl 在运行由 给出的脚本后打印输入文件的每一行-e
。s/^/$./
(^)
将用当前“行”(段落)编号替换行的开头$.
您可以使用awk
$ awk -v RS='\n\n' -vORS='\n\n' '{print NR$0}' file | head -n -2
-v RS='\n\n'
将 awk 的记录分隔符设置为连续的换行符。与 Perl 的段落模式一样,这使得它将段落视为“行”。然后我们告诉它打印当前行号(NR)
和当前“行”$0
。-vORS=
将输出记录分隔符设置为连续的换行符,以便在输出中段落也由空行分隔。head -n -2
以避免在输出末尾添加两个空行。