2011-06-23 46 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