我試圖用perl單行來更新跨越多行的一些代碼,並且看到一些奇怪的行爲。下面是顯示問題我看到一個簡單的文本文件:perl多行匹配問題
ABCD START
STOP EFGH
我希望下面的工作,但它並沒有結束更換任何東西:
perl -pi -e 's/START\s+STOP/REPLACE/s' input.txt
後做一些嘗試,我發現原始正則表達式中的\s+
將匹配換行符,但不匹配第二行中的任何空格,並且添加第二個\s+
也不起作用。所以現在我做了以下解決方法,這是增加一箇中間的正則表達式,只有消除了換行:
perl -pi -e 's/START\s+/START/s' input.txt
這將創建下列中間文件:
ABCD START STOP EFGH
然後我可以運行原始的正則表達式(儘管不再需要的/s
):
perl -pi -e 's/START\s+STOP/REPLACE/s' input.txt
這產生了最終所需的文件:
ABCD REPLACE EFGH
似乎中間步驟不應該是必要的。我錯過了什麼嗎?
你的常見問題的答案在第一句話:「-q的perldoc匹配」 - >「我有麻煩了一個以上的線路匹配什麼錯? 「 – tadmc 2011-05-03 00:27:32
'/ s'隻影響'.'匹配的東西,所以不需要你的'/ s's – ysth 2011-05-03 01:04:56