如何提取shell配置文件的别名?

时间:2009-09-25 02:41:13

标签: regex perl

我需要编写一个脚本来向我展示我在某些配置文件中设置的所有别名,例如.tcshrc和一些私有脚本,以防我忘记别名如“a”的含义, “b”等。配置文件中别名的格式是别名“别名a的内容”或别名b'别名b'的内容。

我写的代码如下:

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

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

但代码不起作用。那么你们中的任何人都可以查看代码并告诉我reqex有什么问题吗?


@KarelBílek 是的,我错过了第二秒的反斜杠,现在它奏效了。但是我仍然有兴趣知道是否有更好的方法来编写正则表达式。

@Charles 我想要匹配的行就像

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

4 个答案:

答案 0 :(得分:5)

您可能不需要脚本。在tcsh中,您可以在不带任何参数的情况下执行alias,它将列出所有别名定义。或者,要查找特定别名,只需运行alias [name],其中NAME是别名的名称。

例如:

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

如果你想反过来说,记住哪些别名映射到ls,你可以使用grep

$ alias | grep ls
a   ls -l

这也适用于其他shell,如bash和zsh。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

只是快速回答而不进行测试(或者看得太多) - 你是不是在第二次 s 之前错过了反斜杠?

答案 3 :(得分:1)

难道你不只是想要grep一些文件吗?这似乎做你想要的:

% grep -h alias ~/.*

你是否正在使用这个脚本做更多的事情?