2014-03-07 149 views
0

我正在嘗試執行一項簡單的任務。在文本文件中列出一個名稱列表,將其提供到foreach循環中,然後對其執行一些操作,例如刪除或複製文件名。Unix TCSH:使用FOREACH循環執行GREP結果不起作用

但我似乎無法得到grep的結果飼料到foreach的變量。

foreach key (`grep -r '*' /nfs/png/disks/png_vlvpe_disk007/tvpv/prod_suite/users/clwong/Pat_Label_Remove_C0_17_17_vrevL2List/vrevL2_append.txt`) 
rm $key 
end 

任何想法?這裏

+0

如果我只是用它來搜索行,grep命令會正確輸出。但是當我引用它來反饋每一個失敗時。爲什麼?發現效果很好。 – ivanwong888899999

+0

文件內容是什麼樣的?輸入欄位分隔符可能有問題 –

+0

file1haha * file2haha * file3haha * 每個都被換行符分隔 – ivanwong888899999

回答

1

訣竅是禁用文件,set noglob

通配符對於文件,如列表:

dfarrell% cat files.txt 
file1.txt* 
file2.txt* 
file3.txt* 
file4.txt* 

您可以用

dfarrell% set noglob; foreach file (`cat files.txt`) 
foreach? unset noglob 
foreach? rm -v "$file" 
foreach? set noglob 
foreach? end 
file1.txt* 
file2.txt* 
file3.txt* 
file4.txt* 

上的每個文件進行操作你可以在使用unset noglob

時重新啓用通配

請注意,我正在輸入命令行,這就是爲什麼您選擇foreach?提示。在文件中的shell腳本中,您不會輸入該文件,或者以這種方式查看它 - 它來自shell。

+0

我以爲貓會將內容連接成單個字符串? – ivanwong888899999

+0

cat讀取一個或多個文件的內容。這有點像一個匹配所有內容的grep - 但是如果你不使用正則表達式,那麼你可以直接列出這個文件。 –

+0

嗯,需要一些幫助...設置noglob後,grep工作得很好,但是然後在循環中我需要使用cp $ file/destination和$ file = filename *,它有一個通配符,並且它完全用noglob設置失敗.... – ivanwong888899999