OVH Cloud OVH Cloud

[grep] affichage des résultat

10 réponses
Avatar
Bruno-L
Bonjour,

Peut-on demander à grep d'afficher ses résultat avec un autre carractère
(un espace par exemple) de séparation (à la place du deux-points) ?

$ grep defun ./*.lsp
./library.lsp:(defun string->list (string)
./library.lsp:(defun string-map (fct string)
./shortcut.lsp:(defun niv:insert (point)
./shortcut.lsp:(defun niv:update (entity)

je voudrais un affichage comme ceci:
niv:insert ./shortcut.lsp
niv:update ./shortcut.lsp
string->list ./library.lsp
string-map ./library.lsp

en gros: une table de correspondance entre le nom de la fonction et le
fichier qui le contient.

bon, je pourai me contenter de ceci, mais c'est très moche:
$ grep defun ./*.lsp | awk '{print $2 " " $1}' | sort
niv:insert ./shortcut.lsp:(defun
niv:update ./shortcut.lsp:(defun
string->list ./library.lsp:(defun
string-map ./library.lsp:(defun


donc si je demande à grep d'afficher ses résultats avec un espace au
lieu du deux-points, je pourais résoudre mon problème

Quelqu'un a une idée ?

merci d'avance





--
Bruno <http://graphitesurcellulose.hautetfort.com>

10 réponses

Avatar
Marc Boyer
Le 16-02-2006, Bruno-L a écrit :
Bonjour,

Peut-on demander à grep d'afficher ses résultat avec un autre carractère
(un espace par exemple) de séparation (à la place du deux-points) ?


Non, mais on peut demander à sed de remplacer le premier : qu'il voit
par un espace.

bon, je pourai me contenter de ceci, mais c'est très moche:
$ grep defun ./*.lsp | awk '{print $2 " " $1}' | sort
$ grep defun ./*.lsp | sed s/:/ / | awk '{print $2 " " $1}' | sort


Marc Boyer
--
Entre le fort et le faible, c'est la liberte qui opprime et le droit
qui libere. Henri Lacordaire, Dominicain

Avatar
Thomas vO
bonjour,

À (at) Thu, 16 Feb 2006 11:46:01 +0100,
Bruno-L nous disait (told us):
Bonjour,

Peut-on demander à grep d'afficher ses résultat avec un autre
carractère (un espace par exemple) de séparation (à la place du
deux-points) ?

$ grep defun ./*.lsp
./library.lsp:(defun string->list (string)
./library.lsp:(defun string-map (fct string)
./shortcut.lsp:(defun niv:insert (point)
./shortcut.lsp:(defun niv:update (entity)

[...]

bon, je pourai me contenter de ceci, mais c'est très moche:
$ grep defun ./*.lsp | awk '{print $2 " " $1}' | sort


j'aurais proposé "grep defun ./*.lsp | sed s/:/ /" mais ça revient à
peu près au même...

--
Thomas vO - <http://perso.enstimac.fr/~vanouden/>

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:43f457ed$0$16638$,
*Bruno-L* tapota sur f.c.o.unix :

Bonjour,

bon, je pourai me contenter de ceci, mais c'est très moche:
$ grep defun ./*.lsp | awk '{print $2 " " $1}' | sort
niv:insert ./shortcut.lsp:(defun
niv:update ./shortcut.lsp:(defun
string->list ./library.lsp:(defun
string-map ./library.lsp:(defun


$ awk '/^(defun/ { print $2,FILENAME }' ./*.lsp

--
Sébastien Monbrun aka TiChou

Avatar
Bruno-L

Bonjour,

Peut-on demander à grep d'afficher ses résultat avec un autre carractère
(un espace par exemple) de séparation (à la place du deux-points) ?



Non, mais on peut demander à sed de remplacer le premier : qu'il voit
par un espace.


bon, je pourai me contenter de ceci, mais c'est très moche:
$ grep defun ./*.lsp | awk '{print $2 " " $1}' | sort


$ grep defun ./*.lsp | sed s/:/ / | awk '{print $2 " " $1}' | sort

Marc Boyer



--
Bruno <http://graphitesurcellulose.hautetfort.com>


Avatar
Bruno-L

$ grep defun ./*.lsp | sed s/:/ / | awk '{print $2 " " $1}' | sort



merci beaucoup, j'ai juste du ajouter des "" autour du s/:/ /

Marc Boyer



--
Bruno <http://graphitesurcellulose.hautetfort.com>

Avatar
Bruno-L

$ awk '/^(defun/ { print $2,FILENAME }' ./*.lsp



ouais, dans le fond, awk, il fait tout, mais on est obligé de parler en
regex ;-) je vais creuser cette commande.

merci beaucoup



--
Bruno <http://graphitesurcellulose.hautetfort.com>

Avatar
Stephane Chazelas
On Thu, 16 Feb 2006 12:16:10 +0100, Bruno-L wrote:

$ awk '/^(defun/ { print $2,FILENAME }' ./*.lsp



ouais, dans le fond, awk, il fait tout, mais on est obligé de parler en
regex ;-) je vais creuser cette commande.
[...]


Ni plus ni moins qu'avec grep. La difference, c'est que par
defaut, grep utilise des regexp basiques (sauf avec grep -E) et
awk des regexp etendues.

Si tu ne veux pas utiliser de regexp:

awk '$1 == "(defun" {print $2, FILENAME}' ./*.lsp

--
Stephane


Avatar
Bruno Bonfils
Stephane Chazelas writes:

Ni plus ni moins qu'avec grep. La difference, c'est que par defaut,
grep utilise des regexp basiques (sauf avec grep -E) et awk des
regexp etendues.


c'est un peu faux de dire ca. Ca dépend si le grep est GNU, ca dépend
si le awk est GNU.

Petit exemple :

% grep -E /dev/null
grep: option non admise -- E


Je me permet également de vous signaler l'existence d'une liste
francophone dédiée à tout ce qui concerne la ligne de commande
(shells, awk, sed, etc...) inscription sur http://lists.asyd.net/

++

--
http://asyd.net/home/

Avatar
Marc
Bruno Bonfils wrote:

Ca dépend si le grep est GNU,

% grep -E /dev/null
grep: option non admise -- E


Évidemment si tu utilises des versions non standards... Le -E est requis
par le standard, et à voir ton adresse je dirais qu'il faut utiliser
/usr/xpg4/bin/grep et pas /usr/bin/grep.

Avatar
Stephane Chazelas
On Thu, 16 Feb 2006 13:56:27 +0100, Bruno Bonfils wrote:
Stephane Chazelas writes:

Ni plus ni moins qu'avec grep. La difference, c'est que par defaut,
grep utilise des regexp basiques (sauf avec grep -E) et awk des
regexp etendues.


c'est un peu faux de dire ca. Ca dépend si le grep est GNU, ca dépend
si le awk est GNU.

Petit exemple :

% grep -E /dev/null
grep: option non admise -- E


Non, ca depend de si le grep est POSIX et UNIX conformant.

"-E" est une option Unix (specifiee par la "Single Unix
Specification"), si un grep ne la reconnait pas alors, il n'est
pas Unix. Si c'est le grep d'un systeme Unix et que c'est celui
qui apparait en premier si on a $PATH egal a ce que retourne
getconf PATH, alors c'est un bug a leur signaler.

Pareil pour awk. Un awk Unix doit reconnaitre des regexp
etendues.

Il est a noter que le awk de GNU ne reconnait les regexp
etendues completement que quand il est appelé en mode POSIX:

POSIXLY_CORRECT=1 awk '/a{3}/ {print "3 consecutive a in " $0}'

ou

gawk -W POSIX

--
Stephane