2016-05-18 2 views
2

Je vais avoir des problèmes avec la commande sed:

J'aimerais remplacer dans une chaîne, une seule citation par deux guillemets simples
Voici ma chaîne:Conserver les espaces lorsque vous utilisez la commande sed dans le script KornShell

04CA07807800106109XE00187200000081960   NI   0780643442  178'0700 

J'ai utilisé cette commande sed pour remplacer le guillemet simple:

line=`echo $line | sed "s/'/''/g"` 

le résultat est

04CA07807800106109XE00187200000081960 NI 0780643442 178''0700 

Comme vous pouvez le voir, le guillemet simple est correctement remplacé par deux guillemets simples.
Mais j'ai perdu tous les espaces entre chaque caractère de ma chaîne et j'ai vraiment besoin de les garder.

Existe-t-il un moyen de conserver ces espaces avec la commande sed?
J'ai essayé avec une commande tr et j'ai obtenu le même résultat.

Nous vous remercions de votre aide.

+0

BTW, 'printf '% s \ n'" $ line "' est en fait un peu plus correct que 'echo" $ line "' (qui est lui-même beaucoup plus correct que 'echo $ line') pour traiter arbitrairement entrée - voir la section UTILISATION DE L'APPLICATION de http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html –

+1

... btw, http://shellcheck.net/ aurait trouvé ce bug pour vous sans avoir besoin d'impliquer les humains. –

+0

Je n'étais au courant d'aucun de ces trucs. Dûment noté. Merci ! – Green

Répondre

1

Problème n'est pas la commande sed mais votre variable sans guillemets. Utilisation:

line=`echo "$line" | sed "s/'/''/g"` 

variables non échappée provoque word splitting qui se traduit par de multiples paramètres pour echo, résultant en des mots espacés simples.

+2

"La variable non cotée rogne tous les espaces multiples en un seul." Genre de. Il subit [le dédoublement de mot] (http://mywiki.wooledge.org/WordSplitting) qui a pour résultat plusieurs paramètres à 'echo', chacun sans espace. –

+0

Merci, j'ai édité la réponse avec une explication plus correcte de votre commentaire. – anubhava

+1

Eh bien, il s'avère que c'est assez facile! Merci à vous deux pour votre aide :) – Green