我有以下字符串:
AAAACE21
我想将其转换为:\xAA\xAA\xCE\x21
基本上我想\x
在每 2 个字符的开头添加。由于某种原因,似乎每当我尝试循环遍历字符串并添加时,它们\
都不会结束。有没有一种班轮可以做到这一点?
答案1
$ echo AAAACE21 | sed 's/../\\x&/g'
\xAA\xAA\xCE\x21
在sed
,.
表示任何字符,所以..
匹配两个字符。您经常需要输入\\
,\
并&
表示替换为匹配的内容。
代表g
的是G局部的;即,只要有可能,就尽可能多地这样做。如果没有它,您将只能得到前两个字符:
$ echo AAAACE21 | sed 's/../\\x&/'
\xAAAACE21
答案2
这是使用 awk 的解决方案:
awk -v FS='' '{for(i=1;i<NF;i+=2) printf "\\x%s%s",$i,$(i+1)}END{printf "\n"}' <<<"AAAACE21"
\xAA\xAA\xCE\x21
将字段分隔符 ( FS
) 设置为空字符串以按字符分隔。然后打印前面带有所需字符串的每两个字符。要打印文字反斜杠,请使用反斜杠对其进行转义。