从程序的输出中打印文件的内容

时间:2014-05-05 17:47:12

标签: bash

假设我有一个程序foo,它找到具有特定规范的文件,并且运行foo的输出是:

file1.txt
file2.txt
file3.txt

我想打印每个文件的内容(最好是文件名前置)。我该怎么做?我会想到它会像猫一样把它用于它:

foo | cat

会起作用,但事实并非如此。

编辑:

我对此问题的解决方案打印出每个文件,并在每行输出前加上文件名:

foo | xargs grep .

输出类似于:

file1.txt: Hello world
file2.txt: My name is foobar.

4 个答案:

答案 0 :(得分:3)

您需要xargs

foo | xargs cat

答案 1 :(得分:3)

<your command> | xargs cat

答案 2 :(得分:1)

为了允许包含空格的文件名,你需要这样的东西:

#/bin/bash
while read -r file
do
   # Check for existence of the file before using cat on it.
   if [[ -f $file ]]; then
      cat "$file"

   # Don't bother with empty lines
   elif [[ -n $file ]]; then
      echo "There is no file named '$file'"
   fi
done

把这个脚本。我们称之为myscript.sh。然后,执行:

foo | myscript.sh

答案 3 :(得分:0)

foo | xargs grep '^' /dev/null
  • 为什么grep ^?也显示空行(替换为&#34;。&#34;如果你只想要非空行)

  • 为什么会有/dev/null?这样,除了&#34; foo&#34;中提供的任何文件名。输出,至少有一个附加文件(和一个没有加工任何东西的文件,例如/ dev / null)。这样,给grep提供了至少2个文件名,因此grep将始终显示匹配的文件名。