次の文字列があります。
AAAACE21
次のように変換したいと思います。基本的に2文字ごとに始めに追加したいと\xAA\xAA\xCE\x21
思います。\x
何らかの理由で文字列を繰り返し追加しようとするたびに文字列が\
終わらないようです。これができるライナーはありますか?
答え1
$ echo AAAACE21 | sed 's/../\\x&/g'
\xAA\xAA\xCE\x21
存在するsed
、.
すべての文字を表します。..
2文字と一致します。表現を入力し\\
て一致するコンテンツに置き換える必要があることがよくあります。\
&
g
示すG言い換えれば、可能な限り、できるだけ実行してください。これがなければ、最初の2文字だけが得られます。
$ 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
)を空の文字列に設定し、文字で区切ります。次に、目的の文字列の前に2文字ごとに印刷します。リテラルバックスラッシュを印刷するには、バックスラッシュでエスケープしてください。