Comment utiliser un remplacement de nouvelle ligne dans un système BSD sed?

StackOverflow https://stackoverflow.com/questions/1421478

  •  07-07-2019
  •  | 
  •  

Question

Bonjour, comment puis-je effectuer les opérations suivantes dans BSD sed?

sed 's/ /\n/g'

Dans la page de manuel, il est indiqué que \ n sera traité littéralement dans une chaîne de remplacement. Comment puis-je éviter ce comportement? Y a-t-il un remplaçant?

J'utilise Mac OS Snow Leopard, je peux installer fink pour obtenir GNU sed.

Était-ce utile?

La solution

Dans un shell, vous pouvez faire:

    sed 's/ /\
/g'

appuyer sur la touche Entrée après la barre oblique inverse pour insérer une nouvelle ligne.

Autres conseils

Autre moyen:

sed -e 's/ /\'

Voir ici .

\n/g'

Voir ici .

Pour ma facilité d'utilisation, j'utilise souvent souvent

cr="\n" 
# or (depending version and OS)
cr="
"

sed "s/ /\\${cr}/g"

afin qu'il reste sur 1 ligne.

Pour développer la réponse de @ sikmir: dans Bash, qui est le shell par défaut sous Mac OS X, il vous suffit de placer un caractère $ devant la chaîne entre guillemets contenant la séquence d'échappement. que vous voulez faire interpréter. Bash le traduira automatiquement pour vous.

Par exemple, j'ai supprimé tous les retours chariot MS-DOS de tous les fichiers source dans lib / et include / en écrivant:

grep -lr 

BSD grep aurait interprété '\ r' correctement, mais l'utilisation de $ '\ r' ne fait pas mal.

BSD sed aurait mal interprété '/ \ r //' seul, mais en utilisant $ 's / \ r //' , j’ai évité ce piège.

Notez que nous pouvons mettre $ devant la chaîne entière et qu'il se chargera de toutes les séquences d'échappement de la chaîne.

$ echo \r' lib include | xargs sed -i -e 

BSD grep aurait interprété '\ r' correctement, mais l'utilisation de $ '\ r' ne fait pas mal.

BSD sed aurait mal interprété '/ \ r //' seul, mais en utilisant $ 's / \ r //' , j’ai évité ce piège.

Notez que nous pouvons mettre $ devant la chaîne entière et qu'il se chargera de toutes les séquences d'échappement de la chaîne.

<*>s/\r//' find . -name '*-e' -delete

BSD grep aurait interprété '\ r' correctement, mais l'utilisation de $ '\ r' ne fait pas mal.

BSD sed aurait mal interprété '/ \ r //' seul, mais en utilisant $ 's / \ r //' , j’ai évité ce piège.

Notez que nous pouvons mettre $ devant la chaîne entière et qu'il se chargera de toutes les séquences d'échappement de la chaîne.

<*>hello\b\\world' hell\world
\r' lib include | xargs sed -i -e

BSD grep aurait interprété '\ r' correctement, mais l'utilisation de $ '\ r' ne fait pas mal.

BSD sed aurait mal interprété '/ \ r //' seul, mais en utilisant $ 's / \ r //' , j’ai évité ce piège.

Notez que nous pouvons mettre $ devant la chaîne entière et qu'il se chargera de toutes les séquences d'échappement de la chaîne.

<*>s/\r//' find . -name '*-e' -delete

BSD grep aurait interprété '\ r' correctement, mais l'utilisation de $ '\ r' ne fait pas mal.

BSD sed aurait mal interprété '/ \ r //' seul, mais en utilisant $ 's / \ r //' , j’ai évité ce piège.

Notez que nous pouvons mettre $ devant la chaîne entière et qu'il se chargera de toutes les séquences d'échappement de la chaîne.

<*>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top