我正在嘗試為我的自動構建程序替換統一檔案中的數字。我嘗試了不同版本的正則運算式以及命令,但似乎沒有一個能正常作業。我目前有
perl -0777 -ne 'print "${1}0" while /(WebGLSupport\s m_APIs:\s[a-b0-9]{8,16}\s m_Automatic\:\s)1/sg' ../../CityBotVRSimWebGL/HandTracking/ProjectSettings/ProjectSettings.asset
正確列印并替換'1'
WebGLSupport
m_APIs: 0b000000
m_Automatic: 0
而不是原來的
<...>
- m_BuildTarget: WebGLSupport
m_APIs: 0b000000
m_Automatic: 1
<...>
但是,當我嘗試進行實際替換時,檔案的完整內容被洗掉(不是檔案本身)
perl -0777 -i -ne 's/(WebGLSupport\s m_APIs:\s[a-b0-9]{8,16}\s m_Automatic\:\s)1/${1}0/' ../../CityBotVRSimWebGL/HandTracking/ProjectSettings/ProjectSettings.asset
誰能告訴我出了什么問題。我真的很困惑,因為正則運算式似乎是正確的。謝謝!
uj5u.com熱心網友回復:
-i開關說您正在進行就地編輯。但是,您使用-n開關處理每一行但不輸出任何內容。也許您想要-p輸出$_(當前“行”)的值。
uj5u.com熱心網友回復:
您似乎想對檔案進行全域查找和替換。您需要-p在命令列上,您的正則運算式可以簡化。
perl -0777 -i.bak -pe \
's{WebGLSupport\s m_APIs:\s[a-b0-9]{8,16}\s m_Automatic\:\s\K1\b}{0}g; ' \
ProjectSettings.asset
斷言意味著保持字串中的\K所有內容直到該點并且不對其進行替換。這有效地允許您“替換此其他文本之前的此文本”。不需要括號或捕獲。1后面的\K就是被新文本替換的所有內容,0。
我\b在之后添加1以表明這必須是一個單詞邊界。大概您不想替換WebGLSupport僅以 1 開頭的其他事件。例如:m_Automatic: 123。
如果字串在檔案中只出現一次,您可以洗掉該/g標志。
https://perldoc.perl.org/perlrun
https://perldoc.perl.org/perlreref#ANCHORS
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506225.html
標籤:perl
