Je suis coincé dans l'inclusion d'expressions régulières avec une commande sed.
Q: Je veux remplacer toutes les occurrences de deux espaces après la fin d'une phrase par une seule fois.
Voici ce que j'ai fait:
sed 's/^ $/^$/' file
Et il n'a pas remplacé deux espaces par un espace après la fin de la phrase.
Sortie que j'obtiens:
This is the output. Hello Hello
Sortie que je veux:
This is the output. Hello Hello
text-processing
sed
Zeus
la source
la source
Réponses:
remplacer le point suivi de deux ou plusieurs espaces par un point suivi d'un seul espace.
la source
sed -r 's/\.\s+/. /g' file
avec GNU sed ...sed -E
plutôt quesed -r
. Cela fonctionne avec GNU sed et * BSD sed (y compris Mac OS X) et quelques autres. Il est prévu de l'inclure en standard dans POSIX "très bientôt maintenant".sed -E
à quelqu'un sur ce site qui n'a pas fonctionné mais qui ased -r
fonctionné .. J'ai travaillé avec GNU sed seul, donc aucune idée sur POSIX et d'autres variantes .. va essayer d'inclure ce détail à l'avenir , merci :)-E
depuis un certain temps maintenant (depuis au moins 2011, mais les pages man et info ne mentionnent toujours que-r
)Votre
sed
commande's/^ $/^$/'
ne fera pas ce que vous voulez. Il suffit de remplacer toutes les lignes contient un espace par un contenant de ligne^$
.Selon les caractères qui marquent la fin de la phrase, vous pouvez faire:
Cela remplacera 2 espaces ou plus après
.
,?
ou!
avec un seul espace.la source
sed -r 's/([.?!])\s+/\1 /g' file
sed
script d'édition d' origine remplacera toute ligne contenant un seul espace par la chaîne littérale^$
.C'est ce que vous cherchez peut-être,
Échantillon,
Utilisation
sed
,la source