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 queawkdivida a entrada em todas as aspas simples. Isso significa que o programaawknunca verá aspas simples, e seugsub()nunca substituirá nada. -
A string
27nã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¿