Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS] sed : garder le motif

19 réponses
Avatar
steve
Bonjour et pardon pour ce HS.

J'ai un long fichier de la forme

ABC(du texte)
MSD(un autre texte)
etc...


J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que
les 3 premiers caractères :

ABC
MSD
etc...


Sed devrait faire l'affaire non ?

J'ai essayé (entre autres)

sed -e 's/^[A-Z][A-Z][A-Z]//' input_file

et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et
plus, donc exactement le contraire de ce que je veux.

Comment lui dire de ne m'afficher *que* le motif cherché ?

Merci d'avance,
Steve

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

10 réponses

1 2
Avatar
Kevin Hinault
Le 27 janvier 2009 15:26, steve a écrit :
Bonjour et pardon pour ce HS.

J'ai un long fichier de la forme

ABC(du texte)
MSD(un autre texte)
etc...


J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai qu e
les 3 premiers caractères :

ABC
MSD
etc...


Sed devrait faire l'affaire non ?

J'ai essayé (entre autres)

sed -e 's/^[A-Z][A-Z][A-Z]//' input_file

et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et
plus, donc exactement le contraire de ce que je veux.

Comment lui dire de ne m'afficher *que* le motif cherché ?




sed -e 's/^([A-Z][A-Z][A-Z]).*/1/' input_file

et encore mieux :

sed -e 's/^([A-Z]{3}).*/1/' input_file

:)

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Yannick Fouquet
Bonjour,

steve a écrit :
J'ai un long fichier de la forme
ABC(du texte)
MSD(un autre texte)
etc...
J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que
les 3 premiers caractères :
ABC
MSD
etc...
Sed devrait faire l'affaire non ?



a priori awk ou perl aussi mais let's try with sed

J'ai essayé (entre autres)
sed -e 's/^[A-Z][A-Z][A-Z]//' input_file

et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et
plus, donc exactement le contraire de ce que je veux.

Comment lui dire de ne m'afficher *que* le motif cherché ?



La formule que j'écrirais est plutôt de la forme :
sed -e 's/^(...).*$/1/' input_file


Les 3 premiers '.' (n'importe quel caractère) peuvent être remplacés
chacun par un [A-Z] si besoin (n'importe quelle lettre de A à Z).
Le dernier '.' suivi de '*' correspondent à n'importe quelle suite de
caractères jusqu'à la fin. Les parenthèses sont là pour grouper les 3
premiers caractères. On les réécrit avec le 1.

Testé approuvé ;-)

Yannick.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Daniel Caillibaud
steve a écrit :
Bonjour et pardon pour ce HS.



Tu peux essayer la liste shellscript pour ça ;-) (http://debianworld.org/shellscript-fr)

J'ai un long fichier de la forme

ABC(du texte)
MSD(un autre texte)
etc...

J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que
les 3 premiers caractères :

ABC
MSD
etc...

Sed devrait faire l'affaire non ?



Oui.
Pour ajouter à ce qu'on dit les autres, on peut utiliser l'option -r pour avoir les regex étendue et ne plus avoir besoin d'échapper les () et {}.

Ensuite, si tu veux ne pas afficher les lignes qui ne correspondent pas au pattern

$ echo 'ABCbla bla
DEFblabla
GhIblabla'|sed -rne 's/^([A-Z]{3}).*$/1/p'
ABC
DEF

le -n, c'est pour ne pas afficher les lignes par défaut, d'où le besoin de préciser le p à la fin de l'expression (on décide un print explicite). Si
tu veux la ligne qui ne correspond pas au pattern, c'est
$ echo 'ABCbla bla
DEFblabla
GhIblabla'|sed -re 's/^([A-Z]{3}).*$/1/'
ABC
DEF
GhIblabla

--
Daniel

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
steve
Salut et merci pour vos réponses.

steve a écrit :
Bonjour et pardon pour ce HS.



Tu peux essayer la liste shellscript pour ça ;-) (http://debianworld.org/shellscript-fr)



Oui, et en plus j'y suis inscrit ...

J'ai un long fichier de la forme

ABC(du texte)
MSD(un autre texte)
etc...

J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que
les 3 premiers caractères :

ABC
MSD
etc...

Sed devrait faire l'affaire non ?



Oui.
Pour ajouter à ce qu'on dit les autres, on peut utiliser l'option -r pour avoir les regex étendue et ne plus avoir besoin d'échapper les () et {}.

Ensuite, si tu veux ne pas afficher les lignes qui ne correspondent pas au pattern

$ echo 'ABCbla bla
DEFblabla
GhIblabla'|sed -rne 's/^([A-Z]{3}).*$/1/p'
ABC
DEF



Chez moi, rien ne s'affiche :
$ cat file.csv | sed -rne 's/^([A-Z]{3}).*$/1/'
$

et pourtant le fichier commence par

ABC(ABCYMO)
BAR(BARDO)



le -n, c'est pour ne pas afficher les lignes par défaut, d'où le besoin
de préciser le p à la fin de l'expression (on décide un print explicite).



Si tu veux la ligne qui ne correspond pas au pattern, c'est
$ echo 'ABCbla bla
DEFblabla
GhIblabla'|sed -re 's/^([A-Z]{3}).*$/1/'
ABC
DEF
GhIblabla



Par contre sans le n le résultat attendu s'affiche.

Merci.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Gilles Mocellin
--iFRdW5/EC4oqxDHL
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Jan 27, 2009 at 03:26:03PM +0100, steve wrote:
Bonjour et pardon pour ce HS.

J'ai un long fichier de la forme

ABC(du texte)
MSD(un autre texte)
etc...


J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que
les 3 premiers caractères :

ABC
MSD
etc...


Sed devrait faire l'affaire non ?

J'ai essayé (entre autres)

sed -e 's/^[A-Z][A-Z][A-Z]//' input_file

et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et
plus, donc exactement le contraire de ce que je veux.



J'ai vu le autres propositions en sed, mais il y a une commande bien plus s imple pour ça : cut.
:~$ cat essai
ABCtruc
DEFchose
AZE
ERZrg
:~$ cut -c 1-3 essai
ABC
DEF
AZE
ERZ


--iFRdW5/EC4oqxDHL
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkl/fZ0ACgkQDltnDmLJYdBgbQCfXXcAow65ro+e/lj7hPzOANfj
vvcAnRXA32Ral8pJ255NqJ5mQTxrbiNq
=IqZo
-----END PGP SIGNATURE-----

--iFRdW5/EC4oqxDHL--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Kevin Hinault
2009/1/27 Gilles Mocellin :

J'ai vu le autres propositions en sed, mais il y a une commande bien plus simple pour ça : cut.
:~$ cut -c 1-3 essai
ABC
DEF
AZE



<Troll>
Tu ne respectes pas sa demande qui était de garder seulement les 3
premiers caractères dans les lignes commençant par trois lettres
majuscule entre A et Z.
:)
</Troll>

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Gilles Mocellin
--nextPart6808011.LSqLJtTfy8
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Le Tuesday 27 January 2009 23:21:12 Kevin Hinault, vous avez écrit :
2009/1/27 Gilles Mocellin :
> J'ai vu le autres propositions en sed, mais il y a une commande bien pl us
> simple pour ça : cut. :~$ cut -c 1-3 essai
> ABC
> DEF
> AZE

<Troll>
Tu ne respectes pas sa demande qui était de garder seulement les 3
premiers caractères dans les lignes commençant par trois lettres
majuscule entre A et Z.

:)




Mais euh !
M'aurais-je gouré ?

Je re-cite :

Bonjour et pardon pour ce HS.

J'ai un long fichier de la forme

ABC(du texte)
MSD(un autre texte)
etc...


J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que
les 3 premiers caractères :

ABC
MSD
etc...



</Troll>



--nextPart6808011.LSqLJtTfy8
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEABECAAYFAkl/mCoACgkQDltnDmLJYdA9VwCdGn8EIFV6mGCrA5tbLtmPmrDL
PRIAnjtLrC9ZWxOyRGuwhlyGrI2daxEO
=3Yz8
-----END PGP SIGNATURE-----

--nextPart6808011.LSqLJtTfy8--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Kevin Hinault
Le 28 janvier 2009 00:26, Gilles Mocellin a écr it :
Mais euh !
M'aurais-je gouré ?

Je re-cite :

Bonjour et pardon pour ce HS.

J'ai un long fichier de la forme

ABC(du texte)
MSD(un autre texte)
etc...


J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai q ue
les 3 premiers caractères :

ABC
MSD
etc...



</Troll>






<Troll>
En effet, il y a un doute possible !

Si on ne lit que le début, on pense en effet que l'auteur désire les 3
premiers caractères quelconques.

Si on lit la suite :
----------------------------
J'ai essayé (entre autres)

sed -e 's/^[A-Z][A-Z][A-Z]//' input_file


----------------------------
Ce qui prête à croire qu'il désirait seulement des [A-Z].

Promis... demain j'arrête les trolls.
</Troll>

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Pierre Meurisse
On Tue, Jan 27, 2009 at 03:26:03PM +0100, steve wrote:

Bonjour et pardon pour ce HS.

J'ai un long fichier de la forme

ABC(du texte)
MSD(un autre texte)
etc...


J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que
les 3 premiers caractères :

ABC
MSD
etc...


Sed devrait faire l'affaire non ?

J'ai essayé (entre autres)

sed -e 's/^[A-Z][A-Z][A-Z]//' input_file

et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et
plus, donc exactement le contraire de ce que je veux.

Comment lui dire de ne m'afficher *que* le motif cherché ?



S'il s'agit bien d'un seul fichier, il y a une méthode simple en deux
temps :
- editer le fichier disons fich.txt avec vi et supprimer tout ce qui
dépasse le troisième caractère (Ctrl-V).
- grep -E "[A-Z][A-Z][A-Z]" fich.txt > fichmodif.txt

A+

--
Pierre Meurisse

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
steve
> > sed -e 's/^[A-Z][A-Z][A-Z]//' input_file
>
> et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et
> plus, donc exactement le contraire de ce que je veux.
>
> Comment lui dire de ne m'afficher *que* le motif cherché ?
>
S'il s'agit bien d'un seul fichier, il y a une méthode simple en deux
temps :
- editer le fichier disons fich.txt avec vi et supprimer tout ce qui
dépasse le troisième caractère (Ctrl-V).
- grep -E "[A-Z][A-Z][A-Z]" fich.txt > fichmodif.txt



Je ne comprends la seconde étape (ni la première d'ailleurs, il faut le
faire manuellement ?) si la première fait le travail.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
1 2