如何将排序输出传递给组合的xargs,-exec?

时间:2013-11-22 17:45:07

标签: bash shell

在我试图说出这个问题的时候,请光临我。

我有一个包含“.m”条目列表的文件,例如

  

Foo.m
  Bar.m

我想用'.h'替换每个'.m',排序并保留uniques。

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

是什么给出了?

2 个答案:

答案 0 :(得分:1)

我不确定我是否足够回答为什么你会看到你所看到的行为,但作为另一种选择,我会尝试这样的事情:

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

答案 1 :(得分:0)

使用@adurdin的回复,发现该命令是

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

哪个没有多大意义。 然后意识到classes.txt文件有CRLF行终止符,导致它被阻塞。

将结尾的行改为Unix格式,就像魅力一样。