我有一個帶有十六進制替換的 sed 命令,我在 Busybox 中使用過:(BusyBox v1.32.1 (2022-03-05 22:56:19 CET) multi-call binary.)
這適用于其他 Linux 環境:
HEXCODE=34
sed "s/\xa1\xb2/\x12\x$HEXCODE/g" < file.bin > file2.bin
在我的busybox sed 環境中它沒有。
這適用于 Ansi 編碼字串:
這有效:
sed $'s/\xa1\xb2/\x12\x34/g' < file.bin > file2.bin
但我希望這里與 Shell 變數一起使用:
HEXCODE=34
sed $'s/\xa1\xb2/\x12\x$HEXCODE/g' < file.bin > file2.bin
這對我不起作用,所以我可以在這里尋求幫助嗎?
編輯:
pynexj 的tipps 在這里對 eval / printf 有幫助:只需要這個 oneliner:
但我希望這里與 Shell 變數一起使用:
HEXCODE=34
eval sed "\$'s/\xa1\xb2/\x12\x$HEXCODE/g'" < file.bin > file2.bin
uj5u.com熱心網友回復:
您可以使用printf或eval。請參見以下示例:
[bash-5.1] $ cat foo.sh
s='hello world'
HEX=4c # 'L'
# use `printf'
cmd=$( printf "s/l/\x$HEX/g" )
echo "$s" | busybox sed -e "$cmd"
# use `eval'
eval cmd="\$'s/l/\x$HEX/g' "
echo "$s" | busybox sed -e "$cmd"
[bash-5.1] $ busybox sh foo.sh
heLLo worLd
heLLo worLd
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/518582.html
標籤:重击变量sed编码忙箱
上一篇:Terraform:SOC2Type-2的Azure策略
下一篇:C#:多種可能型別的類屬性
