簡體   English   中英

使用Sed(或Perl或Ruby)替換跨行的模式

[英]Use Sed (or Perl or Ruby) to replace patterns that span across lines

通常使用Sed(或Perl或Ruby)替換文件中的內容:

sed -i.bak 's/\s+\\{/ {/g' some.code

在此示例中,我想在代碼中的花括號之前刪除換行符,因為它們不是我的編程“方言”(對於我使用的任何語言)的一部分,並且使讀取代碼的自然度和流暢度降低。 但是基本的問題是如何匹配跨越行的模式,而不是匹配文件任何給定行內的模式。

看起來相似的現有SO問題並沒有具體解決一般跨線問題,而是針對用戶嘗試解決的特定問題提供了解決方案,有時甚至通過變通方法來解決。

我在Sed手冊頁中閑逛,找不到任何開關來執行我正在描述的事情。 不過,也許我只是在尋找合適的關鍵字。

使用sed:

sed -r ':a;N;$!ba;s/\s+\{/ {/g' some.code
sed -r -unbuffered '$ !{N;s/\n[[:blank:]]*{/ {/;P;D;};$ p' some.code

允許處理巨大的文件(流版本)。 在中小型(至少幾千行)上,@ BMW的代碼更有效(我想象有1個替換請求,在此代碼中,每個加載的行都有替換)

暫無
暫無

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

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