Regex 如何删除sed中小写字符前面的换行符?
我有一个大约5000行的文本文件。我想删除小写字符前面的行,以便Regex 如何删除sed中小写字符前面的换行符?,regex,awk,sed,Regex,Awk,Sed,我有一个大约5000行的文本文件。我想删除小写字符前面的行,以便 Now is the time for all good men The quick brown fox jumped over 变成: Now is the time for all good men The quick brown fox jumped over 使用GNUsed: sed ':a;N;/\n\([[:lower:]]\)/!ba;s// \1/' file 正确的说法是: #!/bin/bash sed
Now is the time for
all good men
The quick brown fox
jumped over
变成:
Now is the time for all good men
The quick brown fox jumped over
使用GNU
sed
:
sed ':a;N;/\n\([[:lower:]]\)/!ba;s// \1/' file
正确的说法是:
#!/bin/bash
sed ':a;N;/'$'\n''\([[:lower:]]\)/!ba;s// \1/' file
因为POSIX没有将
\n
定义为转义序列。我想我找到了答案
enter code here`sed ':a;N;/\n[a-z]/s/\n/ /;ta;P;D' intput.txt > output.txt
sed是对单个行的简单替换,仅此而已。您试图做的不是在单个行上进行简单的替换,因此您不应该考虑使用sed。只需使用awk:
$ awk '{printf "%s%s", (/^[[:upper:]]/?ors:OFS), $0; ors=ORS} END{print ""}' file
Now is the time for all good men
The quick brown fox jumped over
上述功能将在任何UNIX系统上的任何awk中高效、可移植且健壮地工作。另一个
awk
:
$ awk 'FNR>1 && /^[[:upper:]]/{print ""} {printf "%s%s", $0, OFS} END{print ""}' file
和一个perl
:
$ perl -ne 'print "\n" if $.>1 && /^[[:upper:]]/; s/\R/ /; print; END{print "\n"}' file
GNU只使用了…您认为GNU在这里具体是什么?使用
\n
。POSIXsed
不支持自由使用的\n
(特别是,仅作为嵌入在模式空间中的文本)。用gsed
和POSIXsed
试过你的——只有gsed
有效。否则,太好了。@dawg哦,是的,你是对的!谢谢这一个似乎是一个较短的选择<代码>awk“{printf”%s%s“,$0,(/^[[:upper:]]/?OFS:ORS)}”如果以大写开头的行后面没有以小写开头的行,则将打印尾随空白字符,并且不终止换行符。