Uma solução awk e uma solução shell:
echo '"Hello: World"' | awk '{ gsub("[^\"]", "*", $2); print }'
Precisamos escapar do " em [^\"] , pois a própria expressão regular está entre aspas duplas. Isso gera
"Hello: *****"
Com o shell (pelo menos bash e ksh93 ):
echo '"Hello: World"' | {
read -r prefix rest
printf '%s %s\n' "$prefix" "${rest//[^\"]/*}"
}
Supondo que o texto "Hello: World" esteja em uma linha própria, mas incorporado em um texto maior no arquivo greetings.txt :
awk '/"Hello: [^"]*"/ { gsub("[^\"]", "*", $2) } { print }' greetings.txt >greet.tmp && mv greet.tmp greeting.txt
ou (novamente, com bash ou ksh93 ),
while read -r prefix rest; do
if [[ "$prefix" =~ ^\"Hello: ]]; then
rest=${rest//[^\"]/*}
fi
printf '%s %s\n' "$prefix" "$rest"
done <greetings.txt >greet.tmp
mv greet.tmp greetings.txt
Para a entrada
Specific recipients:
"Hello: Mom!"
"Hello: Cat!"
General recipients:
"Hello: World!"
essas duas soluções geram
Specific recipients:
"Hello: ****"
"Hello: ****"
General recipients:
"Hello: ******"