web-dev-qa-db-fra.com

Comment remplacer des espaces par des nouvelles lignes / entrer dans un fichier texte?

J'ai un simple fichier texte nommé "exemple".

Lecture avec la commande du terminal: cat example

Sortie:

abc cdef ghi jk lmnopq rst uv wxyz

Je veux convertir (transformer) sous la forme suivante: (résultat attendu de cat example)

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Comment puis-je faire cela via la ligne de commande?

(Ceci est seulement un exemple de fichier, je veux convertir la position de Word dans la colonne verticale)

14
Pandya

Quelques choix:

  1. Le classique, utilisez tr:

    tr ' ' '\n' < example
    
  2. Utilisez cut

    cut -d ' ' --output-delimiter=$'\n' -f 1- example
    
  3. Utilisez sed

    sed 's/ /\n/g' example
    
  4. Utilisez Perl

    Perl -pe 's/ /\n/g' example
    
  5. Utiliser la coquille

    foo=$(cat example); echo -e ${foo// /\\n}
    
31
terdon

Essayez la commande ci-dessous

awk -v RS=" " '{print}' file

OR

awk -v RS='[\n ]' '{print}' file

Exemple:

$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Explication:

RS (Record seperator) est une variable awk intégrée. Dans la première commande, la valeur donnée à la variable de séparation des enregistrements est l'espace. alors awk rompt la ligne d’impression chaque fois qu’il trouve un espace.

Dans la deuxième commande, la valeur de la variable RS est l'espace ou un nouveau caractère de ligne. Cette commande élimine la ligne vierge supplémentaire apparue lors de l'exécution de la première commande.

16
Avinash Raj

Vous pouvez utiliser xargs,

cat example | xargs -n 1

ou mieux

xargs -n 1 < example
8
souravc

Utilisation d'un oneliner Perl:

Perl -p -i -e 's/\s/\n/g' example

Il remplacera les espaces et les tabulations par "ENTER" (aka \n)

2
Sylvain Pineau

Personne n'a posté de python, alors voici ce qui suit:

python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt 

Nous redirigeons le fichier d'entrée dans le flux stdin de python et le lisons ligne par ligne. Chaque ligne est séparée de sa nouvelle ligne, divisée en mots, puis réunie en une chaîne dans laquelle chaque mot est séparé par une nouvelle ligne. Cette opération est effectuée pour garantir la présence d'un mot par ligne et éviter que plusieurs lignes ne soient insérées s'il y a plusieurs espaces à côté. L'un et l'autre. Nous finissons par nous retrouver avec une liste de chaînes, qui est ensuite à nouveau jointe en une chaîne plus grande, puis imprimée dans le flux stdout. Ce dernier peut être redirigé vers un autre fichier avec la redirection > out.txt.

1
Sergiy Kolodyazhnyy

Similaire au 'tr' ci-dessus mais avec les ajouts:

  • Fonctionne également pour les onglets

  • Convertit plusieurs espaces ou onglets en une nouvelle ligne

    tr -s '[:space:]' '\n' < example
    
0
AstroTom