5

我想知道如何使用 sed 单行只打印出每个段落的第一个单词。在这种情况下,段落由 2 个换行符之后的文本定义。

例如

This is a paragraph with some text. Some random text that is not really important.

This is another paragraph with some text.
However this sentence is still in the same paragraph.

这应该转换为

This

This
4

3 回答 3

6

思考 段落模式

通过特殊规定,作为 RS 值的空字符串表示
记录由一个或多个空行分隔。

awkperl支持“段落模式”,或者比sed

awk '{ print $1 }' RS= ORS="\n\n" file

或者

perl -00 -lane 'print $F[0]' file

结果:

This

This
于 2013-05-05T15:04:16.537 回答
1

一个可能的GNU sed解决方案是:

sed -rn ':a;/^ *$/{n;ba};s/( |$).*//p;:b;n;/^ *$/ba;bb'

输出:

This
This

它将仅包含空格的行视为空行,并理解段落之间的任意数量的空行。还可以正确处理一个单词的段落。

于 2013-05-05T16:39:15.240 回答
0

这可能对您有用(GNU sed):

sed ':a;$!{N;/\n\s*$/!ba};s/\s.*/\n/' file
于 2013-05-05T23:12:41.613 回答