我有一個非常簡單的awk腳本,需要查看一個字符串並替換雙美元符號($$),雙美元符號與中間數字($ 123 $)和單美元符號($)的任何實例和_。我用gsub在兩個正則表達式中很容易做到這一點,但是我覺得我應該可以用一個正則表達式來完成它,並且它讓我瘋狂到無法鎖定它。可能對時間或速度無關緊要,但在這一點上,我只需要知道我是否正確地採取了更加簡潔的方式,或者我是否瘋了。
這是我目前有:
gsub (/\$[0-9]*\$/, "_", $1);
gsub (/\$/, "_", $1);
我想有使用
gsub (/\$[0-9]*\$*/, "_", $1);
將其設置在同一行沒有問題,但我不知道有一個實例單一的美元符號跟隨數字(123美元),我只想取代美元符號而不是數字。所以我需要匹配1美元符號,然後匹配0或更多的數字,然後匹配1美元符號(如果數字匹配),或者如果沒有數字,則匹配0到1(或更多,實際上並不重要)美元符號。
編輯:對不起,我沒有給出一個更好的例子輸入和所需的輸出。
輸入:
foo$bar$$foofoo$353$foobar$123
abc$123$xyz$$123abc$def$$hij$456$klm
輸出:
foo_bar_foofoo_foobar_123
abc_xyz_123abc_def_hij_klm
希望這是對我想要的東西更清晰。
'\ $ ' – melpomene
'/^\ $(\ d + \ $)?$ /' –
您的問題包括簡潔,可測試的樣本輸入和期望的輸出。包含可能難以讓腳本正確使用的情況以及在輸入和輸出中匹配要匹配的字符串的上下文(如果您沒有刪除它)尤其重要。 –