2013-11-22 66 views
0

請隨身攜帶,因爲我試圖說出問題。如何將排序的輸出傳遞給組合的xargs,-exec?

我有一個的 「.M」 條目列表的文件,這樣

Foo.m
Bar.m

我想更換每一個 '.M' 與'.h',排序並保持獨特性。

cat ../classes.txt | sed 's/\.m/\.h/' | sort -u 

這給我相同的列表只是作爲 '.H' 項,即

foo.h中
Bar.h

第二部分是有關打印到stdout每個導入上面標題的文件。

即一個簡單的入口,它看起來像這樣

echo Foo.h | xargs -I file find Classes -name \*.m -exec grep -q 'import "file' {} \; -print 

然而,管道第一的輸出到第二的時候,我得到了什麼標準輸出。

cat ../classes.txt | sed 's/\.m/\.h/' | sort -u | xargs -I file find Classes -name \*.m -exec grep -q 'import "file' {} \; -print 

是怎麼回事?

+0

'''''''文件'是否是一個錯字? – iruvar

+1

嘗試使用'xargs -t'(打印命令到stderr)來查看它發出的每個命令是否符合您的期望。 – adurdin

+0

@ 1_CR不是拼寫錯誤。它匹配#import「Foo.h」 – qnoid

回答

0

使用@ adurdin的響應,發現命令是

{} ; -print -name *.m -exec grep -q import "Foo.h 

這沒什麼意義。 然後意識到classes.txt文件有CRLF行結束符導致它窒息。

將結束行更改爲Unix格式,像魅力一樣工作。

1

我不知道我跟着足以回答爲什麼你看到你所看到的行爲,但作爲一種替代我想嘗試這樣的事:

while read line; do 
    find Classes -iname "*.m" -exec grep -q "import \"${line}" '{}' ;\ 
done < ../classes.txt | sort -u 
相關問題