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: ******"