2015-01-01 73 views
-2

我試圖用sed從一個文件中處理文本,管結果到grep,但我有grep的循環之前獲取其輸出前循環,嘗試這種代碼的grep用於從sed的

sed 's/["."",""("")"]//g' file.txt | for i in ${array[@]}; do if grep -q -i "${array[$i]}"; then echo "${array[$i]}" fi 
done 

然而問題是,從sed的輸出不被輸送到sed的(通過for循環)

僅此工作得很好:

for i in ${array[@]}; do 
sed 's/["."",""("")"]//g' file.txt | if grep -q -i "${array[$i]}"; then echo "${array[$i]}" 
fi 

但這裏的sed命令在循環中是多餘的。

我該如何讓它工作?

+4

請張貼的輸入數據(file.txt的數組),你想從中獲得什麼以及什麼規則。 – Jotne

+1

這裏有很多東西看起來不對:'[「。」「,」「(」「)」]'很奇怪。 '因爲我在$ {array [@]}'後跟'$ {array [$ i]}'是奇怪的;使用'grep'可以替換爲Bash模式匹配;使用'sed'可以替換爲Bash參數擴展。請遵循Jotne的建議並準確發佈您想要實現的內容(包括'file.txt'和'array'的內容)。 –

+0

任何時候你在shell中編寫循環只是爲了操縱文本,你有錯誤的方法。發佈樣本輸入和期望的輸出,這樣我們就可以幫助你做任何你想做的事情。 –

回答

0

通過你的循環第一次運行時吃所有的SED輸出

解決這個輸出保存到一個變量,並重播每個循環:

words=`sed 's/["."",""("")"]//g' file.txt` 
for i in ${array[@]} 
do 
    if echo "$words" | grep -q -i "${array[$i]}" 
    then 
    echo "${array[$i]}" 
    fi 
done