2011-06-23 43 views
0

我运行下面的命令来搜索文本文件,并显示一个漂亮的输出:猛砸别名与参数失败

$ grep -rnI "SEARCHTERM" . | sed 's/\:\s\+/\:\n/g' 
./path/filename.php:LINENUMBER: 
This line contains SEARCHTERM 

但是当我尝试运行它作为一个别名,我得到一个错误:

$ alias lookfor="grep -rnI '\\!^' . | sed 's/\:\s\+/\:\n/g'" 
$ lookfor SEARCHTERM 
sed: can't read SEARCHTERM: No such file or directory 

任何想法为什么我的别名失败?我敢肯定这是某种引用问题...

回答

2

Bash(令人讨厌的是,恕我直言)不支持别名的参数。相反,我建议写你想要什么,而不是作为一个功能(这是更强大):从长远来看

lookfor() { 
    grep -rnI '\\!^' "[email protected]" | sed 's/\:\s\+/\:\n/g' 
} 

功能得到更好反正...他们会告诉你展开它的错误处理等,稍后如果你喜欢。

+0

什么是“$ @”的呢?它是否等同于.bashrc中的$ PWD?另外,当我做这样的事情时,这个脚本似乎并没有工作(它一直在等待搜索路径):function igrep(){grep -r $ 1“$ @”| grep -v“.svn”;} – Arpith

+0

''$ @“'代表”替换所有赋给命令的参数“。因为'$ @'在引号中,所以也意味着“如果需要引用,请正确引用每个引号”。 EG,如果您键入“lookfor”foo bar“baz”,则“foo bar”baz(包括引号)将传递给grep命令。 (它在实现上稍微复杂一些,但你仍然可以这样思考)。 –

0

我结束了创建一个~/bin folder,并把在那里的可执行文件名为lookfor,具有以下内容:

#!/bin/sh 
grep -rnI "$1" . | sed 's/\:\s\+/\:\n/g' 

~/bin文件夹已经通过我的发行公认的路径中,但对于那些没有谁做这个自动设置,您可以通过它投入添加到您的PATH下面你~/.bashrc

if [ -d ~/bin ] ; then 
    PATH=~/bin:"${PATH}" 
fi