Forum Programmation.shell dans les lignes d'un fichier txt, supprimer uniquement ce qui vient après le caractère #

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-4
27
fév.
2017

Bonjour à tous,
Dans mon fichier txt :
sssssss#tot
zzzzzzz#lot
eerreee#pot
Je cherche à supprimer tout caractère qui viendrai apres # sur toute les lignes dans mon fichier txt
c'est à dire ne garder que :
sssssss#
zzzzzzz#
eerreee#

Avec la commande cut -d# -f-1 je perd le # également, le but est de ne supprimer que ce qui vient après.
Je sens que je me rapproche un peu, mais je bloque ici,

Merci d'avance pour votre aide,

  • # Sed

    Posté par  (site web personnel) . Évalué à 5.

    Ça ira carrément mieux avec sed et une toute petite expression régulière.

    Je te laisse chercher pour les détails, c'est tout simple :P

    Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

    • [^] # Re: Sed

      Posté par  . Évalué à 2.

      Au cas ou tu souhaiterais avoir la version rapide, j'ai l'impression que cette commande répond à ton besoin :

      sed 's/#.*/#/' < fichier.txt
  • # Une version sans sed

    Posté par  . Évalué à 1.

    $ while read; do echo $(echo "$REPLY" | cut -d# -f1)'#'; done < test.txt

    On peut peut-être faire plus élégant, mais rien me vient à l'esprit.

    • [^] # Re: Une version sans sed

      Posté par  . Évalué à 3.

      En modifiant le séparateur de champ (on le positionneva '#'), on doit pouvoir faire un truc du genre while read a b et ne garder que $a en sortie (pas besoin de cut)

      • [^] # Re: Une version sans sed

        Posté par  . Évalué à 1.

        Effectivement :

        $ while IFS='#' read a b ; do echo "$a#"; done < test.txt
        sssssss#
        zzzzzzz#
        eerreee#
    • [^] # Re: Une version sans sed

      Posté par  . Évalué à 2. Dernière modification le 27 février 2017 à 19:17.

      Bonsoir

      En bash :

      while read; do echo ${REPLY%%#*}#; done < test.txt
  • # Avec grep

    Posté par  . Évalué à 2.

    Salut,

    Avec grep :

    $ grep -o '[^#]*#' plop
    sssssss#
    zzzzzzz#
    eerreee#

    ;-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.