Ls conservent la coloration après grep'ing
Question
Si je fais
$ ls -l --color=always
Je reçois une liste de fichiers à l'intérieur du répertoire avec une coloration agréable pour différents types de fichiers, etc ..
Maintenant, je veux être en mesure de diriger la sortie de couleur par ls
pour filtrer grep
certains fichiers que je ne ai pas besoin. La clé est que je veux toujours conserver la coloration après le filtre grep.
$ ls -l --color=always | grep -E some_regex
^ je perds la coloration après grep
EDIT: J'utilise serveur sans tête Ubuntu 8.10, Bash 3.2.39, à peu près un stock d'installation sans configs fantaisie
La solution
Votre grep supprime probablement des codes de couleur de car il a ls
sa propre coloration activée.
"pourrait" faire ceci:
ls -l --color=always | grep --color=never pattern
Cependant, il est très important que vous compreniez ce que vous êtes exactement ping ici grep
. Non seulement est inutile glob
ping <=> (utiliser un lieu <=>), ce cas particulier est par ping <=> non seulement les noms de fichiers et les statistiques de fichiers, mais aussi à travers les codes de couleurs ajoutés par <=>
La vraie réponse à votre question est: Ne pas il <=>. Il n'y a jamais besoin de tuyau en tout ou <=> capturer sa sortie. Ne vise <=> à l'interprétation humaine (par exemple. regarder à dans un interactive shell seulement, et à cet effet, il est extrêmement pratique, bien sûr). Comme mentionné précédemment, vous pouvez filtrer les fichiers en utilisant <=> globs énumère:
ls -l *.txt # Show all files with filenames ending with `.txt'.
ls -l !(foo).txt # Show all files with filenames that end on `.txt' but aren't `foo.txt'. (This requires `shopt -s extglob` to be on, you can put it in ~/.bashrc)
très vous recommandons de lire ces deux excellents documents sur la question:
- Explication de la badness de l'analyse syntaxique <=>: http://mywiki.wooledge.org/ParsingLs
- Le pouvoir de s <=>: http://mywiki.wooledge.org/glob
Autres conseils
Vous devriez vérifier si vous utilisez réellement les ls « vrais », tout en appelant directement le binaire:
/bin/ls ....
Parce que:. Le code décrit doit vraiment travailler, à moins que ls ne tient pas compte --color = toujours pour une raison bizarre ou bug
Je soupçonne certains alias ou une fonction qui ajoute (directement ou par une variable) certaines options. Double-vérifier que ce n'est pas le cas.