簡體   English   中英

使用Perl One線性正則表達式替換來注釋掉多行日志語句

[英]Comment out multiline log statements using perl one liner regex substitution

我有一個perl單行代碼,當日志語句在一行上時可以使用:

find  -type f -iname "*java" | xargs -d'\n' -n 1 perl -i -pe 's{(log.*((info)|(debug)).*)}{//$1}gi'

但是嘗試修改它以在多行上工作很棘手。 我知道s修飾符將與換行符匹配,但是如何獲取它以注釋掉后續行(即最多;假設日志字符串沒有它)?

我也可以將多行日志語句也變成單行日志語句的解決方案很好。 我還將接受C風格的注釋(盡管很高興找到C ++風格的注釋的解決方案)。

(不要告訴我關閉日志記錄。任何實際嘗試過的人都會意識到非平凡應用程序的殘酷程度。)

只是一個一般性想法(請適應您的情況...)

...perl -i -p0e 's{(log.*?((info)|(debug)).*?;)}{ $1 =~ s!^|\n!\n//!gr }gsei'

哪里:

  • .*? 代替.*以表現不貪心
  • -p0e將全文作為單個記錄處理
  • $1 =~ s!^|\\n!\\n//!gr對內部換行符進行額外處理

請在應用之前對其進行測試...

您可以使用范圍運算符start .. stop

perl -i -pe 's!^!//! if /log.*(info|debug)/ .. /;/'

暫無
暫無

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

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