IPB

Bienvenue invité ( Connexion | Inscription )

2 Pages V  < 1 2  
Reply to this topicStart new topic
> commande Terminal à une position connue [RÉSOLU], travailler dans des fichiers .txt
Options
Nicosa
posté 31 Mar 2022, 20:39
Message #31


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 026
Inscrit : 2 May 2007
Lieu : Région Parisienne (91)
Membre no 85 838



Citation (macmacmac @ 31 Mar 2022, 02:59) *
J'ai de nouvelles info, je dois conserver les références en fin de ligne et ne plus les supprimer.
Je te demandais en dernier
- supprimer la fin de ligne à partir de la position 163

Peux-tu STP me refaire cette ligne en annulant cette suppression et en ajoutant deux * en plus de ceux qui s'ajoutaient avant

Ça marche !
Voila une version modifiée (suivi de l'exemple dans la foulée) :
Code
% cat script.sh
#!/bin/zsh
filename=$1
sed -E 's/(^.{80}).(.{4})(.{2})(.{2})(.{5})(.{30})(.{30})(.*)$/\1\2.\3.\4*\5*\6*\7*\8/' $filename | sed -E 's/(^.{163})(.{2})(.{2})(.*)$/\1.\2.\3**\4/'
exit

% cat file1
NOMxxxxx*prénom/                                                                21999092075000PARIS                         FRANCE                        20201111991324505
sqkdfhlqsqosduhfdvsvs                                                           31967123077230JSDJSD                        SFBSDFBF                      20130413991324505
opisbvqkbvksqbv/                                                                62001042391034ERJEN                         ZIGNBN                        20011115991324505
oiqosuqohbsvbsd/                                                                11974030205431EZDDFV                        UZETKISFHG                    20070304991324505
oiqosÇqoÊhbÆsvbsd/                                                              11974030205431EZDDFV                        UZETKISFHG                    20070304991324505
newöÓÉÅîìÄà∂‡‰ˆ‚x/                                                              11974030205431EZDDFV                        UZETKISFHG                    20070304991324505

% ./script.sh file1 > file2

% cat file2
NOMxxxxx*prénom/                                                                1999.09.20*75000*PARIS                         *FRANCE                        *2020.11.11**991324505
sqkdfhlqsqosduhfdvsvs                                                           1967.12.30*77230*JSDJSD                        *SFBSDFBF                      *2013.04.13**991324505
opisbvqkbvksqbv/                                                                2001.04.23*91034*ERJEN                         *ZIGNBN                        *2001.11.15**991324505
oiqosuqohbsvbsd/                                                                1974.03.02*05431*EZDDFV                        *UZETKISFHG                    *2007.03.04**991324505
oiqosÇqoÊhbÆsvbsd/                                                              1974.03.02*05431*EZDDFV                        *UZETKISFHG                    *2007.03.04**991324505
newöÓÉÅîìÄà∂‡‰ˆ‚x/                                                              1974.03.02*05431*EZDDFV                        *UZETKISFHG                    *2007.03.04**991324505
(Nota : Seule la ligne du sed est différente. Tu n'as pas à modifier le reste.)

Citation (macmacmac @ 31 Mar 2022, 02:59) *
NB Je passe un de ces temps à faire ces messages, c'est carrément de la mise en page pour que ce soit clair, car si on met tout en texte brut…
Oui, c'est un peu long. Mais ça rends la lecture plus agréable et simple ! C'est important.
smile.gif


--------------------
Whoever fights monsters should see to it that in the process he does not become a monster;
And when you look long into an abyss, the abyss also looks into you.
- Friedrich Nietzsche -
(issue de la préface de la novélisation "The Abyss" d'Orson Scott Card depuis le film eponyme)
-------------------------------------------------------------------------------------------------------------------------------
[refurb] MacBook Pro 13"(early2019) , QuadCore 2.7GHz, 16Go de RAM, 512Go, sous OSX 10.14 Mojave
MacBook Pro 15"(mid2007) , Core2Duo 2.2GHz, 2x2Go de RAM, SSD Crucial M225 256Go, sous OSX 10.6.7 Snow Leopard [à vendre]
[refurb] MacMini Core2Duo 2.0GHz (early 2009), 1Go de RAM, DD 120Go 5400rpm, sous OSX 10.6.3 Snow Lepard + Mighty Mouse BT + Clavier BT "Alu"
Go to the top of the page
 
+Quote Post
macmacmac
posté 31 Mar 2022, 21:25
Message #32


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 708
Inscrit : 18 Nov 2004
Lieu : Suisse
Membre no 27 214



Citation (Nicosa @ 31 Mar 2022, 21:39) *
Ça marche !
Voila une version modifiée
😳 houaaaaaa la puissante et la rapidité du Terminal pour faire ceci… c'est impressionnant


Citation (Nicosa @ 31 Mar 2022, 21:39) *
Citation (macmacmac @ 31 Mar 2022, 02:59) *
NB Je passe un de ces temps à faire ces messages, c'est carrément de la mise en page pour que ce soit clair, car si on met tout en texte brut…
Oui, c'est un peu long. Mais ça rends la lecture plus agréable et simple ! C'est important.
Oui, mais pour moi je le ressent plutôt comme de la clarté en priorité.

J'ai appris beaucoup de chose grâce à toi. Pas comment créer des commandes ça restera hors de ma portée, mais déjà à naviguer, dire au Terminal où je suis et travaille, comment utiliser cat, sort, etc… des petites choses simples de base.

Merci infiniment Nicosa! 🙏


--------------------
Mac mini M2 8C CPU/10C GPU/8Go RAM - OS Sonoma(last)
Macbook Pro (mi-2012) 2.9GHz Intel Core i7 - 16Go RAM - OS Sonoma(last)
Mac mini (Late 2012) 2.5 GHz Intel Core i5 - 4Go RAM - OS Sonoma(last)

J'ai été hospitalisé, je ne suis pas con, encore lucide, mais l'info n'est pas facile à assimiler. Alors merci de votre clarté et surtout patience avec moi.
Go to the top of the page
 
+Quote Post
Nicosa
posté 31 Mar 2022, 22:03
Message #33


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 026
Inscrit : 2 May 2007
Lieu : Région Parisienne (91)
Membre no 85 838



Citation (macmacmac @ 31 Mar 2022, 22:25) *
J'ai appris beaucoup de chose grâce à toi. Pas comment créer des commandes ça restera hors de ma portée, mais déjà à naviguer, dire au Terminal où je suis et travaille, comment utiliser cat, sort, etc… des petites choses simples de base.
C'est en mettant bout à bout des petits trucs, qu'on peut créer de plus grandes choses.
La navigation par le terminal, c'est la base ; le fait de comprendre qu'on peut lui faire execute des actions sur des fichiers, le pas suivant.

Citation (macmacmac @ 31 Mar 2022, 22:25) *
Merci infiniment Nicosa! 🙏
jap.gif


--------------------
Whoever fights monsters should see to it that in the process he does not become a monster;
And when you look long into an abyss, the abyss also looks into you.
- Friedrich Nietzsche -
(issue de la préface de la novélisation "The Abyss" d'Orson Scott Card depuis le film eponyme)
-------------------------------------------------------------------------------------------------------------------------------
[refurb] MacBook Pro 13"(early2019) , QuadCore 2.7GHz, 16Go de RAM, 512Go, sous OSX 10.14 Mojave
MacBook Pro 15"(mid2007) , Core2Duo 2.2GHz, 2x2Go de RAM, SSD Crucial M225 256Go, sous OSX 10.6.7 Snow Leopard [à vendre]
[refurb] MacMini Core2Duo 2.0GHz (early 2009), 1Go de RAM, DD 120Go 5400rpm, sous OSX 10.6.3 Snow Lepard + Mighty Mouse BT + Clavier BT "Alu"
Go to the top of the page
 
+Quote Post
macmacmac
posté 1 Apr 2022, 12:57
Message #34


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 708
Inscrit : 18 Nov 2004
Lieu : Suisse
Membre no 27 214



Hello Nicosa,

Je reviens sur l'aide que tu m'avais apporté dans l'autre sujet avec ton message:
https://forum.macbidouille.com/index.php?s=...t&p=4405514

en me donnant ce code
Code
sed -n -i '' '/Jamb/p' monfichier.txt

Peux-tu STP me dire ce qu'il écrire pour plusieurs mots?
Le but est d'avoir une ligne de commande qui va conserver dans mon document QUE les lignes qui contiennent les mots que je vais renseigner.

Peut-être répéter le /Jamb/p entre les ' en remplaçant le mot entre les / ?


--------------------
Mac mini M2 8C CPU/10C GPU/8Go RAM - OS Sonoma(last)
Macbook Pro (mi-2012) 2.9GHz Intel Core i7 - 16Go RAM - OS Sonoma(last)
Mac mini (Late 2012) 2.5 GHz Intel Core i5 - 4Go RAM - OS Sonoma(last)

J'ai été hospitalisé, je ne suis pas con, encore lucide, mais l'info n'est pas facile à assimiler. Alors merci de votre clarté et surtout patience avec moi.
Go to the top of the page
 
+Quote Post
Nicosa
posté 1 Apr 2022, 13:47
Message #35


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 026
Inscrit : 2 May 2007
Lieu : Région Parisienne (91)
Membre no 85 838



Citation (macmacmac @ 1 Apr 2022, 13:57) *
Code
sed -n -i '' '/Jamb/p' monfichier.txt

Peux-tu STP me dire ce qu'il écrire pour plusieurs mots?
Le but est d'avoir une ligne de commande qui va conserver dans mon document QUE les lignes qui contiennent les mots que je vais renseigner.


J'adapte et complète ma précédente explication :
  • sed est la commande (diminutif de Stream Editor)
  • -i '' est une information pour lui dire de faire le travail sur le fichier qu'on lui indique (en fin de commande). Attention, ce n'est pas une "double quote" qui suit le "i", mais bien 2 'simple quote' qui se suivent.
  • '/Jamb/p' est le motif sur lequel on travaille : on ouvre avec une simple quote, on mets un slash "/" en début de motif, puis le motif lui-même (Jamb dans mon cas), puis un slash "/" en fin de motif, puis un "p" pour lui dire de faire "print" lorsqu'une ligne contient le motif.
  • monfichier.txt est le fichier depuis lequel travailler et dans notre cas, celui où le travail (l'effacement) sera fait.
  • le -n indique de ne pas afficher la ligne sur laquelle il travaille (donc par défaut, il n'affichera rien). C'est pour ça qu'il me faut un "p" en fin de ligne pour lui dire d'outrepasser le -n lorsqu'on trouve le motif.


Pour plusieurs "mots" (en réalité il s'agit de "suite de caractères", que cela forme un mot, plusieurs ou pas), il faut en effet remplacer le Jamb entre les "/" par une expression qui dit ce qu'on recherche.

Par exemple, si je veux les lignes qui contiennent au moins une de ces 3 chaines de caractères :
  • Jamb
  • Ail
  • on
La "chaine de recherche"(le motif) entre les "/" s'écrira :
Code
Jamb|Ail|on
Le pipe "|" signifie "ou", dans le sens ceci ou bien cela : ceci|cela


Code
% cat monFichier.txt
Oignon 123
Poivrons 6333
Ail 628
Jambon 885
Pain 086

% sed -nE '/Jamb|Ail|on/p' monFichier.txt
Oignon 123
Poivrons 6333
Ail 628
Jambon 885

Remarque que j'ai ajouté un "E" (après le "-n") pour lui dire de traiter la chaine de recherche en regex étendue (c'est une extension de l'expression régulière qui permet davantage de critères pour la recherche, notamment le pipe)

Comme l'autre fois, si on veut que le travail se fasse sur le fichier qu'on lui soumet, il faudra utiliser le -i '' :
Code
% cat monFichier.txt
Oignon 123
Poivrons 6333
Ail 628
Jambon 885
Pain 086

% sed -i '' -nE '/Jamb|Ail|on/p' monFichier.txt

% cat monFichier.txt                          
Oignon 123
Poivrons 6333
Ail 628
Jambon 885


--------------------
Whoever fights monsters should see to it that in the process he does not become a monster;
And when you look long into an abyss, the abyss also looks into you.
- Friedrich Nietzsche -
(issue de la préface de la novélisation "The Abyss" d'Orson Scott Card depuis le film eponyme)
-------------------------------------------------------------------------------------------------------------------------------
[refurb] MacBook Pro 13"(early2019) , QuadCore 2.7GHz, 16Go de RAM, 512Go, sous OSX 10.14 Mojave
MacBook Pro 15"(mid2007) , Core2Duo 2.2GHz, 2x2Go de RAM, SSD Crucial M225 256Go, sous OSX 10.6.7 Snow Leopard [à vendre]
[refurb] MacMini Core2Duo 2.0GHz (early 2009), 1Go de RAM, DD 120Go 5400rpm, sous OSX 10.6.3 Snow Lepard + Mighty Mouse BT + Clavier BT "Alu"
Go to the top of the page
 
+Quote Post
macmacmac
posté 4 Apr 2022, 15:39
Message #36


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 708
Inscrit : 18 Nov 2004
Lieu : Suisse
Membre no 27 214



Hello,


J'ai tardé à répondre car je n'arrive pas à avoir un fonctionnement normal, ce qui m'a demandé du temps pour faire des recherches et essais.


1/ Je voudrais que la commande soit capable de comprendre le mot recherché qu'il soit en bas de casse ou capital (sans tenir compte des majuscules).
Je n'ai pas de problème avec ça pour le moment, mais c'est au cas où la saisie ne serais pas rigoureuse, même si les exports des fichiers n'ont pas l'air de leur donner le choix.

2/ Le mot recherché est retenu partout et même partiellement, si je choisis de rechercher jambon ça va conserver la ligne qui contient jambonneau (😂 l'exemple me fait rire)

3/ Pour être sûr à 100% que la ligne avec le mot retenu reste, je peux ajouter un * après le mot à rechercher car il existe dans le fichier source.
Ors, le résultat conserve les lignes qui ne contiennent pas ce * après le mot recherché, comme si le * n'était pas pris en compte.
Exemple, je cherche FENECH* et ça va garder les lignes qui contiennent FENECH (sans le *)

4/ La sélection est anormalement élargie.
Je retrouve dans le résultat une ligne dont le mot recherché n'y est pas mais y ressemble beaucoup, (on dirait une recherche Google qui propose ce qui se rapproche 😂)
Par exemple, si je cherche FENECH, dans le résultat j'ai une ligne non désirée car elle contient SCHUFFENECKER


En fait, il faut rechercher l'expression exact bas de casse ou capital AVEC le *, ni plus, ni moins.


Tu peux m'aider stp?


Merci (ça n'urge pas je te rappel, c'est un travail personnel, pas un job).


--------------------
Mac mini M2 8C CPU/10C GPU/8Go RAM - OS Sonoma(last)
Macbook Pro (mi-2012) 2.9GHz Intel Core i7 - 16Go RAM - OS Sonoma(last)
Mac mini (Late 2012) 2.5 GHz Intel Core i5 - 4Go RAM - OS Sonoma(last)

J'ai été hospitalisé, je ne suis pas con, encore lucide, mais l'info n'est pas facile à assimiler. Alors merci de votre clarté et surtout patience avec moi.
Go to the top of the page
 
+Quote Post
Nicosa
posté 4 Apr 2022, 16:38
Message #37


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 3 026
Inscrit : 2 May 2007
Lieu : Région Parisienne (91)
Membre no 85 838



Le truc c'est que * en regexp c'est un caractère spécial : il sert à quantifier le nombre de l'elements qui le précède : t* correspond donc à t, tt, ttttttt ou même rien du tout (zéro lettre "t")

Si c'est vraiment * que tu veux garder, il faut peut-être l'échapper avant, donc mettre :
Code
\*
C'est à dire un anti-slash (l'inverse d'un slash /) avant le caractère *

Je te laisse tester ça de toi-même.

Tiens moi au jus.

[edit]

Citation (macmacmac @ 4 Apr 2022, 16:39) *
Par exemple, si je cherche FENECH, dans le résultat j'ai une ligne non désirée car elle contient SCHUFFENECKER

C'est normal si tu recherches FENECH*, puisque cela peut correspondre à "0 ou plusieurs" H, donc :
  • FENEC
  • FENECH
  • FENECHHHHHH
  • etc...

Du coup SCHUFFENECKER est pris, puisqu'il contient bien FENEC.
(c'est à dire FENECH avec 0 lettre H, comme le 1er de ma liste)

Après, c'est un peu la limite des regexp. C'est pas forcement fait pour énoncer beaucoup de critères plus ou moins imbriqués.
C'est là qu'un language SQL aurait l'avantage.

Ce message a été modifié par Nicosa - 4 Apr 2022, 16:39.


--------------------
Whoever fights monsters should see to it that in the process he does not become a monster;
And when you look long into an abyss, the abyss also looks into you.
- Friedrich Nietzsche -
(issue de la préface de la novélisation "The Abyss" d'Orson Scott Card depuis le film eponyme)
-------------------------------------------------------------------------------------------------------------------------------
[refurb] MacBook Pro 13"(early2019) , QuadCore 2.7GHz, 16Go de RAM, 512Go, sous OSX 10.14 Mojave
MacBook Pro 15"(mid2007) , Core2Duo 2.2GHz, 2x2Go de RAM, SSD Crucial M225 256Go, sous OSX 10.6.7 Snow Leopard [à vendre]
[refurb] MacMini Core2Duo 2.0GHz (early 2009), 1Go de RAM, DD 120Go 5400rpm, sous OSX 10.6.3 Snow Lepard + Mighty Mouse BT + Clavier BT "Alu"
Go to the top of the page
 
+Quote Post
macmacmac
posté 4 Apr 2022, 19:03
Message #38


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 708
Inscrit : 18 Nov 2004
Lieu : Suisse
Membre no 27 214



Citation (Nicosa @ 4 Apr 2022, 17:38) *
Tiens moi au jus.

Résultat parfait!!!
Merci infiniment Nicosa 🙏




--------------------
Mac mini M2 8C CPU/10C GPU/8Go RAM - OS Sonoma(last)
Macbook Pro (mi-2012) 2.9GHz Intel Core i7 - 16Go RAM - OS Sonoma(last)
Mac mini (Late 2012) 2.5 GHz Intel Core i5 - 4Go RAM - OS Sonoma(last)

J'ai été hospitalisé, je ne suis pas con, encore lucide, mais l'info n'est pas facile à assimiler. Alors merci de votre clarté et surtout patience avec moi.
Go to the top of the page
 
+Quote Post

2 Pages V  < 1 2
Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 25th April 2024 - 15:35