web-dev-qa-db-fra.com

Comment est-ce que je suis grep sans les principaux espaces blancs?

Je suis greping à travers une grande base de code et les principaux espaces et tabulation semblent être assez gênants. Y a-t-il moyen de s'en débarrasser?

grep -R "something" ./

E.g, au lieu de:

foo/bar.cpp:                       qwertyuiosomethingoi
foo/bar/baz.h:                          43rfsgsomethingdrfg
bar/bar.cpp:            1234edwssomethingczd

Je veux avoir quelque chose comme:

foo/bar.cpp: qwertyuiosomethingoi
foo/bar/baz.h: 43rfsgdsomethingrfg
bar/bar.cpp: 1234edwssomethingczd

Ou mieux:

foo/bar.cpp:   qwertyuisomethingooi
foo/bar/baz.h: 43rfsgdrsomethingfg
bar/bar.cpp:   1234edwssomethingczd
19
Andrew

Créer des fichiers de test

echo -e "\t   foo-somethingfoo" >something.foo
echo "    bar-bar-somethingbar" >something.bar_bar
echo "baz-baz-baz-somethingbaz" >something.baz_baz_baz
echo "  spaces    something  s" >something.spaces

produire une couleur glorieuse complète :)

grep --colour=always "something" something.* | 
 sed -re  's/^([^:]+):(\x1b\[m\x1b\[K)[[:space:]]*(.*)/\1\x01\2\3/' |
   column -s $'\x01' -t

sortie (exécutez-la pour obtenir la couleur).

something.bar_bar      bar-bar-somethingbar
something.baz_baz_baz  baz-baz-baz-somethingbaz
something.foo          foo-somethingfoo
something.spaces       spaces    something  s

Testé en gnome-terminal, konsole, terminator, xterm _

4
Peter.O

Vous pouvez simplement les éliminer en utilisant sed

grep blah filename.foo | sed -e 's/^[ \t]*//'

Qui éliminera les principaux espaces bleus de la sortie

7
Sudipta Chatterjee

En supposant que vous recherchez un modèle re (une expression régulière de base) dans un seul fichier, et vous souhaitez éliminer les principaux espaces de toutes les lignes correspondantes:

sed -n -e 's/^[[:blank:]]*//' -e '/re/p' thefile.c

(En fait, cela élimine d'abord tous les principaux sujets huites, puis cherche le motif, mais le résultat est le même))

Pour post-traiter la sortie grep (comme dans votre question modifiée):

grep re * | sed 's/:[[:blank:]]*/: /'

Le motif [[:blank:]]* correspond à zéro ou à plus d'espaces ou d'onglets.

6
Kusalananda