如果下一行以单词字符开头,则用 space 替换新行
replace new line with a space if next line starts with a word character
我有一个大文本文件,看起来像
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' Input_file
添加另一个解决方案,以防有人使用 awk
寻找 printf
函数。虽然 中提供的第一个解决方案应该使用恕我直言,但作为替代方案,也可以在此处添加这些解决方案。
第二个解决方案: 添加解决方案以检查行是否以字母开头,然后仅将它们添加到前面的行左右。
awk '{printf("%s%s",[=10=]~/^[a-zA-Z]/?(FNR>1 && prev~/^[a-zA-Z]/?OFS:""):ORS,[=10=]);prev=[=10=]} END{print ""}' Input_file
第三个解决方案: 注意:只有当您的行中有冒号时,这才有效,如所示示例。
awk '{printf("%s%s",[=11=]~/:/?(FNR>1?ORS:""):OFS,[=11=])} END{print ""}' Input_file
解释:使用awk
的printf
函数。然后使用条件,如果当前行有 :
并且大于 1,则打印 ORS,否则不打印任何内容。如果行不包含 :
则为每行打印 OFS
。在此程序打印换行符的 END
块中。
我有一个大文本文件,看起来像
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' Input_file
添加另一个解决方案,以防有人使用 awk
寻找 printf
函数。虽然
第二个解决方案: 添加解决方案以检查行是否以字母开头,然后仅将它们添加到前面的行左右。
awk '{printf("%s%s",[=10=]~/^[a-zA-Z]/?(FNR>1 && prev~/^[a-zA-Z]/?OFS:""):ORS,[=10=]);prev=[=10=]} END{print ""}' Input_file
第三个解决方案: 注意:只有当您的行中有冒号时,这才有效,如所示示例。
awk '{printf("%s%s",[=11=]~/:/?(FNR>1?ORS:""):OFS,[=11=])} END{print ""}' Input_file
解释:使用awk
的printf
函数。然后使用条件,如果当前行有 :
并且大于 1,则打印 ORS,否则不打印任何内容。如果行不包含 :
则为每行打印 OFS
。在此程序打印换行符的 END
块中。