2010-01-05 32 views
1

我試圖自動化一個過程,我必須一遍又一遍地完成,在這個過程中我必須解析shell函數的輸出,尋找5個不同的東西,然後把它們放在一個文件在bash腳本上做一個完整的工作流程

我知道我可以匹配模式與grep但是我不知道如何將結果存儲在一個變量,所以我可以使用它後:( 我也必須解析這個非常相同的輸出獲得其他5個值

我不知道如何使用相同的輸出爲5 grep的我需要做的,然後將它存儲到5個不同的變量後使用

我知道我必須創建一個漂亮整潔.SH,但我不知道如何做到這一點

目前我嘗試這個

#!/bin/bash 
data=$(cat file) 
lol=$(echo data|grep red) 
echo $lol 

沒有工作,任何想法?

回答

1

您可以使用下面的語法:

VAR=$(grep foo bar) 

或者:

VAR=`grep foo bar` 
+0

我可以調用grep的另一個變種? 如 VAR = $(grep foo bar) VAR2 = $(VAR | grep其他欄) ? – perrohunter 2010-01-05 08:07:12

+0

不,但是你可以在變量上使用正則表達式匹配,或者(對我來說不太可取)將變量寫入文件,然後grep。 – 2010-01-05 08:09:59

+1

不,但你可以回顯該var和grep echo的輸出:'VAR2 = $(echo $ VAR | grep other)'。注意'$ VAR'。 – slebetman 2010-01-05 08:10:17

1

做的是將函數的輸出重定向到文件最簡單的事情。然後,您可以在其上運行多個greps,並且只有在完成後才刪除該文件。

要保存輸出,您希望使用命令替換。這將運行一個命令,然後將輸出轉換爲命令行參數。與變量賦值結合你:

variable=$(grep expression file) 
3

,你應該表現出你希望下次做什麼一些例子..

假設你的shell函數被調用FUNC1

func1(){ 
    echo "things i want to get are here" 
} 

func1 | grep -E "things|want|are|here|get" > outputfile.txt 

更新:

您的代碼

#!/bin/bash 
data=$(cat file) 
lol=$(echo data|grep red) 
echo $lol 

實際上只是意味着該

lol=$(grep "red" file) 

lol=$(awk '/red/' file) 

另外,如果你使用bash考慮,這是一種方式,你可以做到這一點

while read -r myline 
do 
    case "$myline" in 
     *"red"*) echo "$myline" >> output.txt 
    esac 
done <file 
1

你的第二行是錯誤的。將其更改爲:

lol=$(echo "$data"|grep red) 
0

使用egrep是grep。

變量= $(egrep的 「EXP1 | EXP2 | EXP3 | EXP4 | exp5」 文件)

+0

'grep'允許使用「\ |」的分隔rexps分開替代品。它是'fgrep',它有固定的字符串。 – 2010-01-08 11:28:41