2012-06-05 92 views
7

我試圖找到一個字符串在一個文件中重複的次數,同時我必須將它存儲在一個變量中。如何在變量var中存儲cat命令的值?

當我使用命令(cat filename | grep -c '123456789'),它顯示正確的計數,但是當我使用下面的命令它顯示爲命令未找到。

var =$(cat filename | grep -c '123456789') 
echo $var 

你能告訴我我錯在哪裏嗎?

+0

你需要周圍的單引號您搜索字符串的grep? – Levon

+0

@Levon,只有當正則表達式包含shell可以解釋的字符時才需要grep正則表達式的單引號,比如'$'或'['或']'。作爲一個非常簡單的正則表達式,不包含特殊字符,'123456789'不需要引用。 – ghoti

回答

16

不要使用圍繞=標誌位:

var=$(cat filename | grep -c '123456789') 

至少閱讀Bash Prog Intro Howto

但你已經有了一個沒用使用的cat所以代碼只是

var=$(grep -c '123456789' filename) 
0

使用反引號也可以工作:

varx=`(cat filename| grep -c '123456789')` 

即,$不是必需的,您可以通過使用反引號將各種命令的輸出分配給變量。

例如:

$ pwd 
/home/user99 

$ cur_dir=`pwd` 
$ echo $cur_dir 
/home/user99 
+1

這是有效的,因爲你刪除'='前的空格;你可以保留'$('...')'符號(更易讀,*可嵌套*)而不是反引號 –

+0

@ Levon:在上面的命令中不需要使用$符號嗎? –

+0

@JackieJames沒有必要,該命令如圖所示,您可以使用反引號。我已經用bash和tcsh這兩個。嘗試這種方法遇到問題嗎? – Levon

6

記住的grep可以直接讀取文件。你可以避免useless use of cat

在你的問題的例子中,找不到命令錯誤的發生是因爲空間的等號之前。試試這個:

var=$(grep -c '123456789' filename) 

,或者如果你正在使用bash:在csh/tcsh的

read var < <(grep -c '123456789' filename) 

或(的完整性):

setenv var `grep -c '123456789' filename` 
+0

+1好點:) – Levon

+0

這工作正常,因爲我直接輸入數據。 申報-a的常用3 ARR =($(AWK '/ 123456789/{打印NR}' 文件名)) 回聲$ {ARR [0]} 回聲$ {ARR [*]} 的Bt當我這樣做如下所示,它不起作用。你可以告訴我如何使用參數'name'int命令如下: echo輸入搜索字符串: 讀取名稱 declare -a arr arr =($(awk'/「$ name」/ {print NR}'文件名) echo $ {arr [0]} echo $ {arr [*]} –

+2

根據這個評論很難理解你要問什麼,可能是由於SO格式化造成的混亂。需要爲您的問題添加更多詳細信息,請點擊該問題下的[編輯](http://stackoverflow.com/posts/10891817/edit)鏈接,進行更改,然後我會相應更新我的答案。 – ghoti