问题描述
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
代码。使用 RS(记录分隔符),将其设置为无效。这仅基于您展示的示例。
awk -v RS="" '{$1=$1} 1' Input_file
,
添加另一个解决方案,以防有人使用 printf
寻找 awk
函数。尽管应该使用 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
说明: 使用 printf
的 awk
函数。然后使用条件,如果当前行有 :
并且大于 1,则打印 ORS,否则不打印任何内容。如果行不包含 :
,则为每一行打印 OFS
。在该程序的 END
块中打印换行符。