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
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
_
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
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.