2014-04-25 2 views
2

J'utilise cette commande pour insérer une ligne. S'il y a un espace dans le motif entre deux entrées dans le texte ou le fichier, il imprime le contenu sur la nouvelle ligne. Cela fonctionne bien, mais parfois je rencontre 2 espaces ou 3 espaces au lieu d'un que je cherche dans le motif, donc je reçois des lignes vides supplémentaires. Je veux imprimer une nouvelle ligne seulement le sed trouve quelque chose dans le modèle. Comment devrais-je utiliser la commande sed pour traiter 1 espace ou des espaces doubles ou triples comme un substitut?Sed Commande de substitution Comment traitez-vous les espaces ou les espaces multiples comme un seul?

+0

Je sais que c'est une question sed. Mais il peut être réalisé par 'tr -s '' ' –

+0

Et aussi par' awk' $ 1 = $ 1 'OFS =' \ n'' – devnull

+0

@ shiplu.mokadd.im Il est inutile d'ajouter une option dans les commentaires après qu'il a été spécifié dans l'une des réponses. – devnull

Répondre

3

Vous avez besoin d'un quantificateur:

sed "s/ */\n/g" 

ou

sed 's/ \+/\n/g'  # With GNU sed 

ou

sed -r 's/ +/\n/g' 

ou

sed 's/ \{1,\}/\n/g' 

ou

sed -r 's/ {1,}/\n/g' 

Si vous utilisez BSD sed,

sed 's/ */\'$'\n''/g' 

ou

sed -r 's/ +/\'$'\n''/g' 

Vous pouvez également utiliser tr:

tr -s ' ' '\n' 

L'option -sserre répétitions d'un caractère dans set1, à savoir le ' ' dans cet exemple.

+0

le second n'est pas portable. –

+0

@ shiplu.mokadd.im Merci a ajouté une note. Ajout d'options pour BSD sed aussi. – devnull

0

je ferais quelque chose comme ...

sed -e 's/\s\+/\n/g' [filename] 

Pour rechercher et remplacer un ou plus d'espace blanc avec une nouvelle ligne.

Questions connexes