EOF inattendu en cherchant la correspondance

J’écris un script qui a la commande à exécuter comme ci-dessous:

cat /abc | grep -v ^# | grep -i root | sed -e '\''s/"//g'\'' | awk '\''{print $2}'\'' 

Lorsque je lance le script sur SunOS, je me retrouve sous l’erreur:

 test: line 1: unexpected EOF while looking for matching `"' test: line 3: syntax error: unexpected end of file 

Essayé avec une option différente .. mais pas de chance.

Besoin que quelqu’un m’aide à identifier ce qui manque dans la commande ci-dessus.

quelles sont ces fuites?!

 cat /abc | grep -v '^#' | grep -i root | sed -e '\''s/"//g'\'' | awk '\''{print $2}'\'' ^ ^ ^ ^ 

Votre problème est là:

 sed -e '\''s/"//g'\'' ^ unmatched 

La citation est tout faux. Pourquoi utilisez-vous un guillemet simple, une barre oblique inverse, une citation simple, un devis unique et toujours dans cet ordre? Quoi qu’il en soit, vous avez un double guillemet non coté, donc le shell attend de vous que vous ajoutiez un guillemet de fermeture pour la chaîne entre guillemets qui commence par ce guillemet double.

Par souci de style, vous devriez également perdre l’ utilisation inutile de Cat et réfléchir à la manière de simplifier votre script. Au moins:

 grep -v ^# /abc | grep -i root | sed -e 's/"//g' | awk '{print $2}' 

… mais en pratique

 awk '/^#/ { next } /[Rr][Oo][Oo][Tt]/ { gsub ("\"",""); print $2 }' /abc 

Comme certains caractères des scripts awk et sed ont une signification particulière pour le shell, nous les mettons entre guillemets. Si vous avez besoin de guillemets simples dans un script, vous devez les citer deux fois. un motif fréquent est d’avoir une chaîne entre guillemets simples entre guillemets, comme ceci: echo '"'"'" . Cet echos " (entre guillemets simples) est immédiatement suivi de ' (entre guillemets).

Modifier l’ parsing mise à jour du problème de devis; exemple de code ajouté; exemple de code corrigé. L’édition finale corrige la citation de gsub dans le script awk, et ajoute une petite discussion sur les citations.