2009-09-25 5 views
0

Je dois écrire un script pour me montrer tout l'alias que j'ai défini dans certains fichiers de configuration comme .tcshrc et un script privé dans le cas où j'oublie la signification d'un alias comme "a", "b", etc. le format des alias dans le fichier de configuration est soit alias un "contenu d'alias a" soit alias b 'contenu d'alias b'.Comment puis-je extraire les alias pour les fichiers de configuration shell?

le code que j'ai écrit est comme ci-dessous:

#! /usr/bin/perl 
open (F , "<" , ".tcshrc") or die "can't open it; $! " ; 

while (<F>) { 
if (/\b(alias\s+\w+\s+[\'\"][^\'\"]*[\'\"])/) { 
     print $1 ; 
} 

mais le code ne fonctionne pas. Alors, pourriez-vous jeter un coup d'œil au code et me dire ce qui ne va pas avec le reqex?


@Karel Bílek Oui, j'ai raté la barre oblique inverse au deuxième s, maintenant il a travaillé. mais je suis toujours intéressé de savoir s'il y a une meilleure façon d'écrire l'expression rationnelle.

@Charles les lignes que je veux correspondre est comme

alias a 'ls -l' 
alias b "rm *" 
+0

Il serait plus utile d'obtenir également les lignes que vous essayez de faire correspondre, afin que nous puissions savoir si l'expression régulière est correcte ou non. – Charles

Répondre

5

Vous n'avez peut-être pas besoin d'un script pour cela. Dans tcsh, vous pouvez simplement exécuter alias sans aucun argument et il affichera toutes les définitions d'alias. Ou pour rechercher un alias particulier, exécutez simplement alias [name] où NAME est le nom de l'alias.

Par exemple:

$ alias 
a ls -l 
b rm * 
$ alias a 
ls -l 
$ alias b 
rm * 

Si vous voulez aller dans l'autre sens, disons, rappelez-vous que les alias carte à ls, vous pouvez utiliser grep pour que:

$ alias | grep ls 
a ls -l 

Cela fonctionne aussi dans d'autres coquilles comme bash et zsh.

1

juste réponse rapide sans le tester (ou à la recherche trop à vous) - ne vous manque backslash avant le deuxième s?

2
#! /usr/bin/perl 
open (my $f , "<" , ".tcshrc") or die "can't open it; $! " ; 

while (<$f>) { 
if (/\b(alias\s+\w+\s+['"][^'"]*['"])/) { 
     print $1 ; 
} 
1

Vous ne voulez pas juste les fichiers grep? Cela semble faire ce que vous voulez:

% grep -h alias ~/.* 

Faites-vous quelque chose de plus sophistiqué avec ce script?

Questions connexes