【问题标题】:replace new line with a space if next line starts with a word character如果下一行以单词字符开头,则用空格替换新行
【发布时间】:2021-09-15 01:47:51
【问题描述】:

我有一个看起来像这样的大文本文件

some random : demo text for
illustration, can be long

and : some more

here is : another
one

我想要这样的输出

some random : demo text for illustration, can be long
and : some more
here is : another one

我尝试了一些奇怪的、明显有问题的正则表达式,例如 %s/\w*\n/ /g,但无法真正理解。

【问题讨论】:

    标签: awk unix-text-processing


    【解决方案1】:

    使用您展示的示例,请尝试遵循awk 代码。使用 RS(记录分隔符),将其设置为无效。这仅基于您展示的示例。

    awk -v RS="" '{$1=$1} 1' Input_file
    

    【讨论】:

      【解决方案2】:

      添加另一个解决方案,以防有人正在寻找带有awkprintf 函数。虽然Here 中提供的第一个解决方案应该使用恕我直言,但也可以在这里添加这些解决方案。

      第二个解决方案:添加解决方案以检查行是否以字母开头,然后只添加它们与前一行左右。

      awk '{printf("%s%s",$0~/^[a-zA-Z]/?(FNR>1 && prev~/^[a-zA-Z]/?OFS:""):ORS,$0);prev=$0} END{print ""}' Input_file
      

      第三种解决方案: 注意:这仅在您的行中有冒号时才有效,如所示示例所示。

      awk '{printf("%s%s",$0~/:/?(FNR>1?ORS:""):OFS,$0)} END{print ""}'  Input_file
      

      解释:使用awkprintf函数。然后使用条件,如果当前行有 : 并且大于 1 则打印 ORS 否则不打印任何内容。如果行不包含:,则为每一行打印OFS。在此程序的END 块中打印换行符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-07
        • 1970-01-01
        • 2021-11-22
        • 1970-01-01
        • 2020-11-21
        • 2022-01-22
        相关资源
        最近更新 更多