Para substituir todas as aspas simples que são flanqueadas por palavras com ¿
em um arquivo (supondo que bash
seja usado, para que possamos usar $'...'
):
q=$'27'
sed "s/\>'\</$q/g" file
Alternativamente
q=$( printf '27' )
sed "s/\>'\</$q/g" file
ou
sed "s/\>'\</¿/g" file
Com a entrada dada, isso produziria
'gasg¿dhsh';'dhdjs'
O padrão \>'\<
corresponderia a qualquer '
que tenha um caractere de palavra imediatamente antes e depois. O caractere ;
e o início / fim da linha não são caracteres de palavras, enquanto g
e d
são.
Seu código tem três problemas principais:
-
Uma única string citada no shell talvez nunca contenha uma aspa simples. A aspa simples incorporada na chamada para
gsub()
terminará a única string entre aspas que é o códigoawk
, produzindo um erro de sintaxe. -
Definir o separador de campos de entrada como uma aspa simples usando
-F "'"
fará com queawk
divida a entrada em todas as aspas simples. Isso significa que o programaawk
nunca verá aspas simples, e seugsub()
nunca substituirá nada. -
A string
27
não é um ponto de interrogação invertido, a menos que seja interpretada como uma sequência de escape.
Corrigir todos esses problemas faria o programa funcionar, mas substituiria todas as ocorrências de aspas simples:
$ awk -F ';' -v OFS=';' '{ for (i=1; i<=NF; ++i) gsub("'"'"'", sprintf("27"), $i); print }' file
¿gasg¿dhsh¿;¿dhdjs¿