web-dev-qa-db-fra.com

remplacer le caractère `'` en utilisant awk

J'ai des lignes avec un seul : et un' en eux que je veux supprimer Je veux utiliser awk pour cela. J'ai essayé d'utiliser:

 awk '{gsub ( "[:\\']","" ) ; print $0 }'

et

 awk '{gsub ( "[:\']","" ) ; print $0 }'

et

 awk '{gsub ( "[:']","" ) ; print $0 }'

aucun d'entre eux n'a fonctionné, mais renvoie l'erreur Unmatched ".. quand je mets

 awk '{gsub ( "[:_]","" ) ; print $0 }'

then Cela fonctionne et supprime tous les caractères : et _. Comment puis-je me débarrasser du caractère '?

16
SIMEL

Vous pouvez utiliser:

  1. Code octal pour la citation simple:

    [:\47]
    
  2. Les guillemets simples entre guillemets doubles, mais dans ce cas, les caractères spéciaux Seront développés par le shell:

    % print a\': | awk "sub(/[:']/, x)"        
    a
    
  3. Utilisez une expression rationnelle dynamique, mais il y a des implications pour la performanceà cette approche:

    % print a\': | awk -vrx="[:\\\']" 'sub(rx, x)'  
    a
    
7
Dimitre Radoulov

tr est faite à cet effet

echo test\'\'\'\':::string | tr -d \':
teststring

$ echo test\'\'\'\':::string | awk '{gsub(/[:\47]*/,"");print $0}'
teststring
11
Fredrik Pihl

Cela marche:

awk '{gsub( "[:'\'']","" ); print}'
8
ssapkota

Avec bash, vous ne pouvez pas insérer une seule citation dans un littéral entouré de guillemets simples. Utilisez '"'"' par exemple.

Tout d'abord, ' ferme le littéral actuel, puis "'" le concatène avec un littéral ne contenant qu'un seul guillemet, et ' rouvre un littéral de chaîne, qui sera également concaténé.

Ce que tu veux c'est:

awk '{gsub ( "[:'"'"']","" ) ; print $0; }'

l'alternative de ssapkota est également bonne ('\'').

6
Benoit

Je ne sais pas pourquoi vous vous limitez à utiliser awk, de toute façon vous avez beaucoup de réponses d'autres utilisateurs Vous pouvez également utiliser sed pour vous débarrasser de ": '"

sed 's/:\'//g'

Cela servira aussi votre but. Simple et moins complexe.

3
Venkat Madhav

Cela fonctionne aussi:

awk '{gsub("\x27",""); print}'

2
Andy Barbour