2 votes

La suppression des retours à la ligne d'un fichier ne fonctionne pas

J'essaie d'utiliser sed pour supprimer le saut de ligne des lignes qui contiennent un motif. Mes lignes sont :

              Format:                    0000000
              InputMask:                 &&&&&&&
              OrdinalPosition:           0

              Required:                  True
              SourceField:               LOAN-NO
              SourceTable:               MASTER

Je veux que ça ressemble à ça :

              Format:                    0000000
              InputMask:                 &&&&&&&
              OrdinalPosition:           0

              Required:                  True
              SourceField:               LOAN-NO:SourceTable:               MASTER

Mon code est :

cat file.txt | sed 's/\(*.SourceField.*\)\(\n\)/\1:/g'

Le code ne change rien. En fait, même lorsque je supprime le motif et que je recherche \n ça ne marche toujours pas

Cela semble fonctionner pour toutes les lignes :

cat file.txt | sed ':a;N;$!ba;s/\n//g' 

mais je n'arrive pas à le faire fonctionner pour les seules lignes contenant le SourceField.

J'aimerais comprendre pourquoi la première ligne ne fonctionne pas, et comment la deuxième ligne peut être adaptée pour ne fonctionner qu'avec les lignes contenant le motif.

Toute aide serait appréciée.

Gracias.

1voto

karakfa Points 604
$ sed -E '/SourceField:/{N;s/\n */:/;}' file

              Format:                    0000000
              InputMask:                 &&&&&&&
              OrdinalPosition:           0

              Required:                  True
              SourceField:               LOAN-NO:SourceTable:               MASTER

votre premier script ne fonctionnera pas car sed Les opérations sont basées sur les lignes. Dans l'espace des motifs, vous pouvez supprimer la nouvelle ligne.

0voto

sputnick Points 31663

Utilisation de perl sur multiligne contexte (type de naturel ):

perl -0 -pe 's/(\s+SourceField:\s+LOAN-NO)\n\s+/$1:/' file
  • le site \s+ sont des espaces (ou des blancs). N'est-ce pas un code clair et lisible ?
  • le site -0 permet à Perl d'aspirer l'ensemble du fichier dans un fichier variable unique de type chaîne

          Format:                    0000000
          InputMask:                 &&&&&&&
          OrdinalPosition:           0
    
          Required:                  True
          SourceField:               LOAN-NO:SourceTable:               MASTER

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X