每 2 个字符之前添加某个字符串

每 2 个字符之前添加某个字符串

我有以下字符串:

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) 设置为空字符串以按字符分隔。然后打印前面带有所需字符串的每两个字符。要打印文字反斜杠,请使用反斜杠对其进行转义。

相关内容