Pages : 1
#1 Le 28/01/2021, à 13:21
- ar barzh paour
[Résolu] syntaxe de sed
bonjour à tous
suite à cette discussion
https://forum.ubuntu-fr.org/viewtopic.p … #p22408702
qui pourrait me "décoder" la syntaxe de cette ligne ?
sed '/deb .*ppa.launchpad.net/ s@.*ppa.launchpad.net/\(.*\)/ubuntu.*@\1@p' fichiers
Dernière modification par ar barzh paour (Le 29/01/2021, à 16:28)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#2 Le 28/01/2021, à 17:21
- MicP
Re : [Résolu] syntaxe de sed
Bonjour
Je le traduirais comme ça :
EDIT : J'ai oublié de prendre en compte quelques caractères.
Voir plutôt la description de Watael dans le message suivant.
Rechercher une ligne qui contient deb suivit de quelque chose et suivit de ppa.launchpad.net
et n'afficher de cette ligne
que ce qui est entre : ppa.launchpad.net/ et /ubuntu
=======
Par exemple, si le fichier fichiers contient une ligne comme celle là :
deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main
dans le retour de la ligne de commande :
sed '/deb .*ppa.launchpad.net/ s@.*ppa.launchpad.net/\(.*\)/ubuntu.*@\1@p' fichiers
il y aura une ligne comme celle là :
webupd8team/java
Dernière modification par MicP (Le 29/01/2021, à 01:24)
Hors ligne
#3 Le 28/01/2021, à 18:18
- Watael
Re : [Résolu] syntaxe de sed
pas tout à fait
deb suivi d'une espace, puis un nombre quelconque de caractères (ou zéro), puis ppa, un caractère (parce que le point n'est pas échappé), etc
effectuer la substitution en ne gardant que ce qu'il y a entre .net et /ubuntu (cf. référence arrière), et afficher la ligne (pas uniquement la ligne, parce qu'il n'y a pas l'option -n)
les @ sont le séparateur défini par l'utilisateur pour que celui par défaut (/) ne soit pas confondu avec ce caractère qui est contenu dans une des expressions.
Dernière modification par Watael (Le 29/01/2021, à 01:35)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 29/01/2021, à 01:20
- MicP
Re : [Résolu] syntaxe de sed
…pas tout à fait …
Oui, merci pour la correction : j'avais oublié de préciser le caractère espace après deb
et n'avais pas fait attention aux deux caractères point qui ne sont pas échappés.
Hors ligne
#5 Le 29/01/2021, à 09:30
- DonutMan75
Re : [Résolu] syntaxe de sed
Hello,
super traduction !
Petite précision quand Watael tu parles de "référence arrière", tu fais bien référence au "\1" ? Ou bien y'a-t-il une subtilité que je n'ai pas vue... ?
D.
Hors ligne
#6 Le 29/01/2021, à 11:54
- ar barzh paour
Re : [Résolu] syntaxe de sed
OK MicP et Watael
mais j'y vais petit à petit
(et je remets -n puisqu'à l'origine il était là
dans
sed -n '/deb .*ppa.launchpad.net/ s@.*ppa.launchpad.net/\(.*\)/ubuntu.*@\1@p' fichiers
-n /deb .*ppa.launchpad.net/ ===> ne sélectionner que les lignes qui comportent cette suite de caractères (comme expliquer dans post #3)
s@....... ===> j'essaierai une explication plus tard
exemple de fichier un peu bidon "essai-sed.txt
deb [arch=amd64] htps://repo.skype.com/deb stable main
XXX stable main
deb yyyyyyppa.launchpad.net/ABCDEF/ubuntu universe main
deb zzzzzzppa-launchpad-net/GKLMNO/ubuntu stable main
deb htp://ppa.launchpad.net/webupd8team/java/ubuntu xenial main
ok je comprends le résultat
jpb@jpb-MS-7A70:~$ sed -n '/deb .*ppa.launchpad.net/ p' essai-sed.txt
deb yyyyyyppa.launchpad.net/ABCDEF/ubuntu universe main
deb zzzzzzppa-launchpad-net/GKLMNO/ubuntu stable main
deb htp://ppa.launchpad.net/webupd8team/java/ubuntu xenial main
jpb@jpb-MS-7A70:~$
s@......?
je ne connais que s/REGEXP/REPLACEMENT/FLAGS => (voir plus bas l'explication)
sed -n '/deb .*ppa.launchpad.net/ s@.*ppa.launchpad.net/\(.*\)/ubuntu.*@\1@p' essai-sed.txt
ABCDEF
GKLMNO
webupd8team/java
je ne comprends pas l'utilisation de @ (en tant que séparateur)
@.*ppa.launchpad.net/\(.*\)/ubuntu.*@
mémorise ce qu'il y a entre @.*ppa.launchpad.net/ et /ubuntu.@
\1@p imprime ce qui est mémorisé (@ ????)
mais je constate que j'obtiens le même résultat en remplaçant @ par X
sed -n '/deb .*ppa.launchpad.net/ sX.*ppa.launchpad.net/\(.*\)/ubuntu.*X\1Xp' essai-sed.txt
ABCDEF
GKLMNO
webupd8team/java
mais c'est peut-être mon incompréhension de RegExt
enfin si je ne comprends pas la syntaxe , j'ai compris le but
je pense avoir trouvé
http://sed.sourceforge.net/grabbag/tutorials/sedfaq.txt
4.42. How do I replace "/some/UNIX/path" in a substitution?
Technically, the normal meaning of the slash can be disabled by
prefixing it with a backslash. Thus,sed 's/\/some\/UNIX\/path/\/a\/new\/path/g' files
But this is hard to read and write. There is a better solution.
The s/// substitution command allows '/' to be replaced by any
other character (including spaces or alphanumerics). Thus,sed 's|/some/UNIX/path|/a/new/path|g' files
and if you are using variable names in a Unix shell script,
sed "s|$OLDPATH|$NEWPATH|g" oldfile >newfile
d'où l'explication de Watael que je n'avais pas comprise @ remplace /
ce qui peut être utile quand les chaînes ont un /
si xxx et yyy n'ont pas de / on utilisera /
s/xxx\(.*\)yyy/\1/p : mémoriser ce qui est entre xxx et yyy et l'imprimer
si xxx et yyy ont des caractères / on pourra utiliser @ (par exemple)
s@xxx\(.*\)yyy@\1@p : idem , mémoriser ce qui est entre xxx et yyy et l'imprimer
CQFD ?
j'y reviens
sed -n '/chaine0/ s@chaine1\(.*\)chaine2@\1p <<< "$ligne"
si ligne contient chaine0
on imprime ce qu'il y a entre chaine1 et chaine2
chaine1 et chaine 2 peuvent contenir / mais pas @
ligne="debut tartempion deb uvt ppaXlaunchpadYnet/xABCDEFy/ubuntufinde chaine"
jpb@U20-04-e3:~$ sed -n '/deb .*ppa.launchpad.net/ s@.*ppa.launchpad.net/\(.*\)/ubuntu.*@\1@p' <<<"$ligne"
xABCDEFy
Dernière modification par ar barzh paour (Le 09/03/2021, à 15:43)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne