Modifier le résultat de chaque commande

1

Je voudrais savoir s'il y a un moyen de modifier la sortie de chaque commande que j'exécute dans le terminal. Le but est de rendre la sortie formatée pour mon howto de démarquage.

Par exemple

ls -la .*z
#>-rw-r--r--  1 hologos  staff   3580 26 zář 14:22 .zconfig
#>-rw-------  1 hologos  staff  28927 17 říj 15:59 .zhistory
#>-rw-r--r--  1 hologos  staff   5600 30 zář 08:03 .zshrc

Le "#>" correspond à ce que je veux. Chaque ligne de sortie commence par ceci. J'utilise principalement zsh.

Je vous remercie.

Hologos
la source

Réponses:

2

Je ferais quelque chose comme

  command | sed -e 's/^/line-prefix /'

exemple

$ ls -la m* | sed -e 's/^/#> /'
#> -rwxr-xr-x 1 root root 76080 Aug 11  2011 mailstats
#> -r-xr-xr-x 1 root root 92824 Aug 11  2011 makemap
#> -rwxr-xr-- 1 root root 12389 Jul 22  2011 makewhatis
#> -rwxr-xr-x 1 root root 11520 Mar  6  2011 matchpathcon
#> -rwxr-xr-x 1 root root 56600 May 18  2011 mcelog
#> lrwxrwxrwx 1 root root    15 Mar 18  2011 mkdict -> cracklib-format
#> -rwxr-xr-x 1 root root  9600 Jul 22  2011 mklost+found
#> -rwxr-xr-x 1 root root 10176 Jan  6  2007 mksock
#> -rwxr-xr-x 1 root root  4409 Jan  7  2007 modeline2fb
#> -rwxr-xr-x 1 root root 23787 Jul 22  2011 mountstats
#> -rwxr-xr-x 1 root root 58032 Jan  7  2007 mtr

Vous pouvez également appliquer cela à un shell afin que cela se fasse automatiquement

$ ksh | sed -e 's/^/#> /'
$ ls m*
#> mailstats
#> makemap
#> makewhatis
#> matchpathcon
#> mcelog
#> mkdict
#> mklost+found
#> mksock
#> modeline2fb
#> mountstats
#> mtr

Il y a probablement des inconvénients / pièges, prenez garde à cela.


Une autre approche consiste à exécuter script(voir man script), puis utilisez votre éditeur de texte favori (ou un petit perl / awk / etc script) pour le rendre convivial démarquage - je voudrais juste ne En vim quelque chose comme :%s/^/#> /de fixer toutes les lignes en une seule fois . Ensuite, j'insérerais les en-têtes de démarques, etc.

RedGrittyBrick
la source
C'est exactement ce dont j'ai besoin. Je prévois de l'utiliser lors de l'exécution de toutes sortes de commandes. Y a-t-il des inconvénients / pièges auxquels vous pouvez penser?
Hologos
@Hologos: Certaines commandes se comportent différemment si STDOUT est dirigé vers un processus plutôt que connecté à un téléscripteur. De plus, il y a une certaine bizarrerie dans l'invite du shell qui ne semble pas causer de dommages, mais qui est déconcertante. Il y a probablement plus.
RedGrittyBrick
1
IFS=$'\n';for line in `ls -la .*z`;do echo "#>$line";done

il ls -la .*zparcourra la commande output ( ) et affichera le résultat à l’écran en ajoutant un préfixe #>à chaque ligne

ps:

la IFSpartie sert à définir le délimiteur sur une nouvelle ligne au lieu d'un espace


la source
Merci, y a-t-il un moyen que je ne devrais pas avoir à écrire ceci? Quelque chose comme cd() { builtin cd "$@" && ll; }mais pour chaque commande ou un type d'alias qui modifierait chaque commande en arrière-plan?
Hologos
pourquoi voudriez-vous éviter d'utiliser la forboucle?
Ou quelque chose comme ls -la .z*ça mais ça le développerait automatiquement comme ls -la .z* | my-programce qui contiendrait votre code.
Hologos