Isso resolverá seu primeiro problema:
echo "[STATUS REPORT] PROJECT" | awk '{ gsub(/PROJECT/, "A\&A"); print }'
( &
é um caractere especial em substituição de awk: significa "o que foi correspondido". Você precisa escapar com \
. E como você está em uma string do awk, é necessário colocar 2 \
para produzir um como \
escape do próximo char como em \n
.)
Isso resolverá seu segundo problema:
ProjectName=toto
echo "[STATUS REPORT] PROJECT" | awk -v "ProjectName=$ProjectName" '{ gsub(/PROJECT/, ProjectName); print }'
( Editar : observe o recém-adicionado "
em torno de ProjectName=$ProjectName
, para que um espaço em ProjectName
não quebre o script.)
Mas o awk é uma grande ferramenta para realizar a substituição de strings, você pode querer usar o sed:
echo "[STATUS REPORT] PROJECT" | sed -e 's/PROJECT/A\&A/'
ProjectName=toto;
echo "[STATUS REPORT] PROJECT" | sed -e "s/PROJECT/${ProjectName//\//\/}/"
( Editar : um /
em ProjectName
will estava quebrando a solução inicial. Eu adicionei o escape de barras, mas outro (s) outro (s) caractere o quebra: &
, , ... Eu acho que o shell abaixo é mais seguro.)
ou no shell bash simples:
msg="[STATUS REPORT] PROJECT"
echo ${msg//PROJECT/A&A}
ProjectName=toto
echo ${msg//PROJECT/$ProjectName}