unix:如何连接grep中匹配的文件

时间:2011-12-16 08:17:12

标签: unix grep cat

我想连接名称不包含“_BASE_”的文件。我以为它会在...的某个方面。

ls | grep -v _BASE_ | cat > all.txt
猫部分是我不对的。有人可以给我一些想法吗?

3 个答案:

答案 0 :(得分:4)

试试这个

ls | grep -v _BASE_ | xargs cat > all.txt

答案 1 :(得分:2)

您可以使用ls选项忽略--ignore的某些文件,然后将其合并到一个文件中。

ls --ignore="*_BASE_*" | xargs cat > all.txt 

您也可以在没有xargs的情况下执行此操作:

cat $( ls --ignore="*_BASE_*" ) > all.txt

<强> UPD : Dale Hagglund注意到,像“Some File”这样的文件名将显示为两个文件名,“Some”和“File”。为避免这种情况,您可以使用--quoting-style=WORD选项,WORD可以是shellescape

例如,如果--quoting-style=shell某些文件将打印为“某些文件”,则会被解释为一个文件。

另一个问题是输出文件可能与ls个ed文件中的一个相同。我们也需要忽略它。

答案是:

outputFile=a.txt; ls --ignore="*sh*" --ignore="${outputFile}" --quoting-style=shell | xargs cat > ${outputFile}

答案 2 :(得分:1)

如果你想从子目录获取文件,`find'是你的朋友:

find . -type f ! -name '*_BASE_*' ! -path ./all.txt -exec cat {} >> all.txt \+

它搜索当前目录及其子目录中的文件,它只查找文件(-type f),忽略与通配符模式*_BASE_*匹配的文件,忽略all.txt,并执行{{1与cat的方式相同。