web-dev-qa-db-fra.com

Supprimez les caractères indésirables en utilisant awk ou sed

J'ai une sortie de commande dont je veux supprimer les doubles guillemets ".

Regex:

strings -a libAddressDoctor5.so |\
grep EngineVersion |
awk '{if(NR==2)print}' |
awk '{print$2}'

Sortie:

EngineVersion="5.2.5.624"

Je voudrais savoir comment supprimer les caractères indésirables avec awk ou sed.

28
abi1964

Utilisez la substitution de sed: sed 's/"//g'

s/X/Y/ remplace X par Y.

g signifie que toutes les occurrences doivent être remplacées, pas seulement la première.

38
Piotr Praszmo

En utilisant simplement awk, vous pouvez le faire (j'ai également raccourci certains de vos tuyaux):

strings -a libAddressDoctor5.so | awk '/EngineVersion/ { if(NR==2) { gsub("\"",""); print $2 } }'

Je ne peux pas le vérifier pour vous parce que je ne connais pas votre entrée exacte, mais les travaux suivants fonctionnent:

echo "Blah EngineVersion=\"123\"" | awk '/EngineVersion/ { gsub("\"",""); print $2 }'

Voir aussi cette question sur la suppression des guillemets simples.

32
gregswift

tr peut être plus concis pour supprimer des caractères que sed ou awk, en particulier lorsque vous souhaitez supprimer différents caractères d'une chaîne.

Suppression des guillemets doubles:

echo '"Hi"' | tr -d \"
# Produces Hi without quotes

Suppression de différents types de supports:

echo '[{Hi}]' | tr -d {}[]
# Produces Hi without brackets

-d signifie "supprimer".

3
Matthias Braun