我已經匹配了某個模式,另外還有一個數字
perl -pe 's/\(pattern\)(\d)/ ... /'
我知道我可以通過將 $1 放在 ... 所在的位置和使用 $2 的數字來訪問模式。我現在如何在 ... 所在的位置重復模式 $2 次?更具體地說,我有一個運算式:
perl -pe 'while(s/Power\(((?:(?!Power\().) ?),2\)/(($1)*($1))/){}' file.txt
我想將其概括為不僅匹配 2,它在那里硬編碼以重復 $1 兩次,而且匹配任何數字 n 并重復 $1 n 次。所有這些仍然應該在 oneliner 中完成。
因此,例如將腳本呼叫到運算式上,例如
Power(Power(x,3),2)
應該回來
(((x)*(x)*(x))*((x)*(x)*(x)))
uj5u.com熱心網友回復:
您可以使用
perl -pe 'while(s/Power\(((?:(?!Power\().) ?),(\d )\)/"((". $1 . ")" . ("*(" . $1 . ")") x ($2-1) . ")"/e){}' file.txt
看在線演示:
#!/bin/bash
s='Power(25,2) Power(225,4)'
perl -pe 'while(s/Power\(((?:(?!Power\().) ?),(\d )\)/"((". $1 . ")" . ("*(" . $1 . ")") x ($2-1) . ")"/e){}' <<< "$s"
# => ((25)*(25)) ((225)*(225)*(225)*(225))
該/e標志將 RHS 視為運算式,替換是動態構建的,并且在x運算子的幫助下進行重復。請注意,重復量等于第 2 組中捕獲的數量減去1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358697.html
