簡體   English   中英

有沒有辦法在sed中獲取字符的ASCII碼?

[英]Is there a way to get a character's ASCII code in sed?

我正在寫一個sed腳本,其中一部分需要用其ASCII代碼的十六進制值替換特定子集中的字符。 我做了一些研究,但找不到任何東西,所以我開始認為sed不具備讓我做到這一點的功能。 如果這里有sed專家,請您給我啟示?

PS:諸如sed -e "s/A/41/g" -e "s/B/42/g"... etc將無法執行。

如果perl可以替代您,那么:

fge@erwin ~ $ perl -pe 's,[abcRte], ord($&) ,ge'
oiiiiisdfa
oiiiiisdf97
abcRte
97989982116101

而IFS =讀取-r -n1 c; 做printf'%x'“'$ c”; 完成<infile> outfile

不, sed的s命令只能將字符轉換為小寫/大寫字母,它沒有用等價的ascii代碼替換字符的功能。 有用於音譯的“ y”命令,但是它需要1對1映射的長度,因此該命令不起作用。

不看您的代碼,我最好的建議是awk

這可能對您有用:

ord () { printf '%d' "'$1"; }
hex () { printf '%x' "'$1"; }
export -f ord hex
echo {a..z} | sed '/[f-m]/s//$(ord &)/g;s/.*/echo "&"/' | sh
a b c d e 102 103 104 105 106 107 108 109 n o p q r s t u v w x y z
echo {a..z} | sed '/[f-m]/s//$(hex &)/g;s/.*/echo "&"/' | sh
a b c d e 66 67 68 69 6a 6b 6c 6d n o p q r s t u v w x y z

如果您有GNU sed:

sed '/[f-m]/s//$(ord &)/g;s/.*/echo "&"/e'

要么

sed '/[f-m]/s//$(hex &)/g;s/.*/echo "&"/e'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM