簡體   English   中英

刪除后跟字符串的換行符 (\\n) - 使用 SED

[英]Remove newlines (\n) if they are followed by a string - using SED

我有一個文本文件,如果它們后跟字符串“fox”,我需要刪除換行符

the 
brown 
fox 
jumps 

會變成

the 
brown fox 
jumps 

我想在 SED 中執行此操作,但 AWK 解決方案也很有用。

使用 Perl:

perl -0pe 's/\nfox/fox/g' file

輸出:

the 
brown fox 
jumps

這可能對你有用(GNU sed):

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

將兩行讀入模式空間,如果第二行符合條件,則刪除換行符並重復。 第一行總是被打印出來然后被刪除。 如果模式空間中仍然有一行,即條件不匹配,則附加另一行等,但是如果該行確實符合條件,則模式空間為空,兩行將被讀入,就像在文件的開頭。

這不是 sed 的工作,而是 awk 的工作:

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

上面用空白字符 (OFS) 替換了 Fox 之前的換行符 (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

但這一次將整個文件讀入內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM