Supprimer tout ce qui précéde un pattern de caractères ?
Résolu
Swiss Knight
Messages postés
2257
Statut
Membre
-
Swiss Knight Messages postés 2257 Statut Membre -
Swiss Knight Messages postés 2257 Statut Membre -
Bonjour,
j'ai des lignes de texte de ce genre dans mon_fichier.txt :
monsieur-durandXXXJean-dupond
directeur
madame-joséphineXXXarlette jeane
assistance de direction
etc.
Je souhaite simplement enlever tout ce qui précédent les XXX (les XXX y compris) et
la commande :
sed -i '/^[a-zA-Z]+XXX/d' mon_fichier.txt
ne me donne rien, je ne comprends pas pourquoi.
Merci d'avance et bonne soirée !
j'ai des lignes de texte de ce genre dans mon_fichier.txt :
monsieur-durandXXXJean-dupond
directeur
madame-joséphineXXXarlette jeane
assistance de direction
etc.
Je souhaite simplement enlever tout ce qui précédent les XXX (les XXX y compris) et
la commande :
sed -i '/^[a-zA-Z]+XXX/d' mon_fichier.txt
ne me donne rien, je ne comprends pas pourquoi.
Merci d'avance et bonne soirée !
A voir également:
- Supprimer tout ce qui précéde un pattern de caractères ?
- Supprimer rond bleu whatsapp - Guide
- Impossible de supprimer un fichier - Guide
- Impossible de supprimer une page word - Guide
- Caractères spéciaux - Guide
- Supprimer pub youtube - Accueil - Streaming
2 réponses
Salut,
$ cat plop monsieur-durandXXXJean-dupond directeur madame-joséphineXXXarlette jeane assistance de direction $ sed 's/.*XXX//' plop Jean-dupond directeur arlette jeane assistance de direction $
Merci zipe31 :)
je ne sais pas pourquoi je vais toujours chercher si loin parfois.
Par contre je n'arrive pas à supprimer les lignes vides de mon fichier avec :
sed -i '/^$/d' mon_fichier.txt
Il doit y avoir une subtilité quelque part... :S
EDIT :
je souhaiterais ensuite pouvoir remplacer tous les sauts de lignes impairs par une virugle+espace (pour mettre les titres des gens en face de leurs noms.
Peut-être avec awk ? Ceci permettant d'afficher que les lignes impaires :
awk 'NR % 2 == 1' mon_fichier.txt
je pensais partir de ça, mais il y a peut-être plus court/simple...
Merci !
"Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement." -A. Einsten-
je ne sais pas pourquoi je vais toujours chercher si loin parfois.
Par contre je n'arrive pas à supprimer les lignes vides de mon fichier avec :
sed -i '/^$/d' mon_fichier.txt
Il doit y avoir une subtilité quelque part... :S
EDIT :
je souhaiterais ensuite pouvoir remplacer tous les sauts de lignes impairs par une virugle+espace (pour mettre les titres des gens en face de leurs noms.
Peut-être avec awk ? Ceci permettant d'afficher que les lignes impaires :
awk 'NR % 2 == 1' mon_fichier.txt
je pensais partir de ça, mais il y a peut-être plus court/simple...
Merci !
"Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement." -A. Einsten-
Par contre je n'arrive pas à supprimer les lignes vides de mon fichier avec : sed -i '/^$/d' mon_fichier.txt
Il doit y avoir une subtilité quelque part... :S
Simplement parce que ta ligne vide ne doit pas être totalement vide, il se peut qu'il y ait des caractères non-imprimables ;-\
Pour le savoir :
je souhaiterais ensuite pouvoir remplacer tous les sauts de lignes impairs par une virugle+espace (pour mettre les titres des gens en face de leurs noms.
Il doit y avoir une subtilité quelque part... :S
Simplement parce que ta ligne vide ne doit pas être totalement vide, il se peut qu'il y ait des caractères non-imprimables ;-\
Pour le savoir :
cat -A ton_fichier ou sed -n l ton_fichier
je souhaiterais ensuite pouvoir remplacer tous les sauts de lignes impairs par une virugle+espace (pour mettre les titres des gens en face de leurs noms.
$ cat plop monsieur-durandXXXJean-dupond directeur madame-joséphineXXXarlette jeane assistance de direction $ sed 'N;s/.*XXX//;s/\n/, /' plop Jean-dupond, directeur arlette jeane, assistance de direction $
Salut et merci de ton aide précieuse encore une fois !
1. Il y a ça lorsque je fais un cat -A, sur la ligne vide : ^M$
2. avec la commande sed j'ai ce message d'erreur : sed: -e expression n°1, caractère 1: commande manquante
la deuxième commande sed, pour remettre les choses en ordre, fonctionne quant à elle presque très bien :
$ cat plop
$ sed 'N;s/.*XXX//;s/\n/, /' plop
Lorsque je disais une ligne sur deux, c'était pour mettre en face de chaque personnage sa fonction, or ici ça rate une personne sur deux. Le hic c'est que je ne comprends pas pourquoi, la commande est compréhensible il me semble. Y a même des virgules qui ne semblent pas s'être affichées.
1. Il y a ça lorsque je fais un cat -A, sur la ligne vide : ^M$
2. avec la commande sed j'ai ce message d'erreur : sed: -e expression n°1, caractère 1: commande manquante
la deuxième commande sed, pour remettre les choses en ordre, fonctionne quant à elle presque très bien :
$ cat plop
jean-unXXXjean jacques assistant du chef paul-deuxXXXjean rené patron dir'gén marie-andréeXXXjeanne d'arlequin assistante domestique manu-joséXXXmanuel oliveira gardien dîmmeuble
$ sed 'N;s/.*XXX//;s/\n/, /' plop
jean jacques, assistant du chef jean rené patron dir'gén, jeanne d'arlequin, assistante domestique manuel oliveira gardien dîmmeuble
Lorsque je disais une ligne sur deux, c'était pour mettre en face de chaque personnage sa fonction, or ici ça rate une personne sur deux. Le hic c'est que je ne comprends pas pourquoi, la commande est compréhensible il me semble. Y a même des virgules qui ne semblent pas s'être affichées.
1. Il y a ça lorsque je fais un cat -A, sur la ligne vide : ^M$
C'est que ton fichier provient d'un système Windows. Le "^M" est la marque de fin de ligne spécifique au format Windows ;-(
Il faut au-préalable convertir ton fichier au format Unix à l'aide du programme "dos2unix" (à installer si pas présent).
Tu peux aussi le faire avec "sed", voir la FAQ : Conversion retours chariots DOS (CRLF) / UNIX (LF)
2. avec la commande sed j'ai ce message d'erreur : sed: -e expression n°1, caractère 1: commande manquante
Attention c'est un ELLE minuscule et non pas un UN :
Une fois que tu auras converti ton fichier au format Unix, tu pourras exécuter cette commande :
C'est que ton fichier provient d'un système Windows. Le "^M" est la marque de fin de ligne spécifique au format Windows ;-(
Il faut au-préalable convertir ton fichier au format Unix à l'aide du programme "dos2unix" (à installer si pas présent).
Tu peux aussi le faire avec "sed", voir la FAQ : Conversion retours chariots DOS (CRLF) / UNIX (LF)
2. avec la commande sed j'ai ce message d'erreur : sed: -e expression n°1, caractère 1: commande manquante
Attention c'est un ELLE minuscule et non pas un UN :
sed -n l plop
Une fois que tu auras converti ton fichier au format Unix, tu pourras exécuter cette commande :
$ cat plop monsieur-durandXXXJean-dupond directeur madame-joséphineXXXarlette jeane assistance de direction jean-unXXXjean jacques assistant du chef paul-deuxXXXjean rené patron dir'gén marie-andréeXXXjeanne d'arlequin assistante domestique manu-joséXXXmanuel oliveira gardien dîmmeuble $ sed '/^$/!N;s/.*XXX//;s/\n/, /' plop Jean-dupond, directeur arlette jeane, assistance de direction jean jacques , assistant du chef jean rené , patron dir'gén jeanne d'arlequin , assistante domestique manuel oliveira , gardien dîmmeuble $
Salut,
alors merci pour ton astuce là, mon fichier était apparemment au format DOS et la commande sed avec un ELLE minuscule me retourne ça sur les lignes vides : \r$
Une fois passé au format UNIX la commande d'après marche bien, mais comme toi ici, j'ai des espaces qui viennent avant la virgule à partir de la troisième ligne. Bon ce n'est pas bien grave mais c'est encore un truc qui me paraît mystérieux :-)
alors merci pour ton astuce là, mon fichier était apparemment au format DOS et la commande sed avec un ELLE minuscule me retourne ça sur les lignes vides : \r$
Une fois passé au format UNIX la commande d'après marche bien, mais comme toi ici, j'ai des espaces qui viennent avant la virgule à partir de la troisième ligne. Bon ce n'est pas bien grave mais c'est encore un truc qui me paraît mystérieux :-)