如果后面跟一个字符串,则删除换行符(\ n) - 使用SED

时间:2016-03-25 22:56:45

标签: regex awk replace sed

我有一个文本文件,如果后面跟着字符串" fox"

我需要删除换行符
the 
brown 
fox 
jumps 

将成为

the 
brown fox 
jumps 

我想在SED中这样做,但AWK解决方案也很有用。

3 个答案:

答案 0 :(得分:2)

使用Perl:

from pyspark.sql.functions import col, get_json_object

dfRates.toDF(["id", "json_string"]).select(
  # This assumes you expect userId field
  get_json_object(col("json_string"), "$.userId"), 
  ...
)

输出:

the 
brown fox 
jumps 

答案 1 :(得分:2)

这可能适合你(GNU sed):

sed ':a;N;/\nfox/s/\n//;ta;P;D' file

在模式空间中读取两行,如果第二行符合条件,则删除换行符并重复。始终打印第一行然后删除。如果模式空间中仍然有一条线,即标准不匹配,则附加另一条线等,但是如果线符合条件,则模式空间为空,并且将读入两条线,如同在文件的开头。

答案 2 :(得分:2)

这不是sed的工作,它是awk的工作:

$ awk 'NR>1{printf "%s", (/fox/ ? OFS : ORS)} {printf "%s", $0} END{print ""}' file
the
brown fox
jumps

上面用空白字符(OFS)替换狐狸之前的换行符(ORS)。按摩适合...

使用GNU awk,您可以将其减少为:

$ awk -v RS='^$' -v ORS= '{gsub(/\nfox/," fox")} 1' file
the
brown fox
jumps

或:

$ awk -v RS='\nfox' '{ORS=gensub(/\n/," ",1,RT)} 1' file
the
brown fox
jumps

但是它一次将整个文件读入内存。