假设我有一个程序foo
,它找到具有特定规范的文件,并且运行foo
的输出是:
file1.txt
file2.txt
file3.txt
我想打印每个文件的内容(最好是文件名前置)。我该怎么做?我会想到它会像猫一样把它用于它:
foo | cat
会起作用,但事实并非如此。
编辑:
我对此问题的解决方案打印出每个文件,并在每行输出前加上文件名:
foo | xargs grep .
输出类似于:
file1.txt: Hello world
file2.txt: My name is foobar.
答案 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将始终显示匹配的文件名。