我有一個充滿 \u 代碼的檔案,并希望將它們全部替換為相應的 utf8 字符,例如“\u00FC”將變為“ü”:
這是我走了多遠:
echo 'f\u00FCr' | perl -C -p -e "s/\\\\(u[0-9A-Fa-f]{4})/ chr(hex(sprintf('0x%s', '00FC'))) /ge"
這將輸出預期的“für”。我只是不知道如何將捕獲組的值用于 sprintf 函式?$1、$1、\1 和 \1 不起作用。猜猜它會很簡單,但不知道要搜索什么。:-)
或者如果有更好的方法,也請告訴我!
uj5u.com熱心網友回復:
$1
是正確的,盡管您錯誤地將 包含u
在捕獲中。
但是你必須小心逃離外殼。您顯然正在使用sh
或類似(基于您需要轉義\
),因此在使用雙引號時必須轉義某些字符。這包括$
. 您的外殼在看到它$1
之前正在插值。perl
最好使用單引號。
perl -C -pe's/\\u([0-9A-Fa-f]{4})/ chr(hex($1)) /ge'
請注意,這sprintf('0x%s', '00FC')
等效于'0x' . '00FC'
,但hex
不需要前導0x
. '00FC'
(因此$1
)就足夠了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/470771.html
上一篇:Perl動態函式參考