Você precisa entender que \{
é especial em sed
. Então você precisa disso:
#!/bin/sh
# filename: yourscript.sh
# usage: ./yourscript.sh 44 33 22
for arg; do set "$@" " 0x$arg"; shift; done
IFS=",";
sed -e "/byte address\[\]/s/{[^}]*}/{$* }/" yourfile.c
Resultado
When invoked as:
% ./yourscript.sh 44 33 22
byte address[] = { 0x44, 0x33, 0x22 };
Explicação
- A primeira tarefa é obter os números
hexified
dos argumentos. Isso é obtido através de loop na lista de argumentos usando o loopfor
. Cada vez, adicionamos a versão hexa do argumento atual no final da lista de argumentos$@
enquanto, ao mesmo tempo, tiramos o argumento atualshift
da frente da lista. Isso significa que, no final das iterações do loopfor
, acabaríamos com a lista de argumentoshexified
. - Agora, definimos o
IFS
como uma vírgula para unir os argumentos com uma vírgula. - O código sed traz a lista
"$*"
dentro da parte de substituiçãosed
s///
.