[英]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.