0
我在使用toupper()
在gawk sub()
中遇到問題。我正在使用&
替代匹配字符串的功能。gawk sub()與&符和toupper()不起作用
$ gawk '{sub(/abc/, toupper("&")); print $0; }'
xabcx
xabcx
我預計:
xABCx
變種toupper()
但沒有&
與&
但沒有toupper()
工作:
$ gawk '{sub(/abc/, toupper("def")); print $0; }'
xabcx
xDEFx
$ gawk '{sub(/abc/, "-&-"); print $0; }'
xabcx
x-abc-x
它與tolower()
同樣失敗。我誤解了&
的工作原理嗎? (使用gawk 3.1.x和最新的4.1.3進行測試)。
不錯的偵探工作!我明白爲什麼你這樣拼寫出來,但可能值得補充的是它可以簡化爲'gawk'匹配($ 0,/ o + /,m){sub(/ o + /,toupper(m [0])) )} 1''。 –
@ed,我試過了,但是第一個'(。*)'太貪婪了,除了一個「o」以外,其他都沒有。 –
我不確定哪個更好 - 'gawk'match($ 0,/ o + /, m){sub(/ o + /,toupper(m [0]))} 1''這使得你指定正則表達式兩次(對於複雜正則表達式來說是個問題),或者'gawk'匹配($ 0,/ o + /,m) {sub(m [0],toupper(m [0]))} 1''如果match()中使用的正則表達式匹配自身包含RE元字符串的字符串,則會導致問題。所有事情都考慮到了,我認爲使用substr()的最終腳本是解決這兩個問題的最佳方法。 –