【问题标题】:Print only the first word of each paragraph using sed使用 sed 仅打印每个段落的第一个单词
【发布时间】:2013-05-06 07:12:41
【问题描述】:

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

例如

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

【问题讨论】:

    标签: sed


    【解决方案1】:

    思考 paragraph mode

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

    awkperl 支持“段落模式”,两者都比sed 更好:

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

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

    结果:

    This
    
    This
    

    【讨论】:

    • 附注一下,如果您希望记录分隔符恰好为两个换行符,请将RS="\n\n" 用于awk。不记得如何在 cmd 行的perl 中执行此操作。也许这里的其他人会知道?
    【解决方案2】:

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

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

    输出:

    This
    This
    

    它将只有空格的行视为空行,并理解段落之间的任意数量的空行。还能正确处理一个单词的段落。

    【讨论】:

      【解决方案3】:

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

      sed ':a;$!{N;/\n\s*$/!ba};s/\s.*/\n/' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        • 2022-11-27
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 2016-07-01
        • 1970-01-01
        相关资源
        最近更新 更多