如何在之前/之间/之后包含多个固定行的“cat”文件?

如何在之前/之间/之后包含多个固定行的“cat”文件?

我正在寻找一个 bash 单行代码,它可以处理cat多个具有多个固定行的文件。

文件1.txt:

file1 line 1
file1 line 2

文件2.txt

file2 line 1
file2 line 2

然后我正在寻找类似的东西

cat-with-strings foo file1.txt bar file2.txt baz

生产产出

foo
file1 line 1
file1 line 2
bar
file2 line 1
file2 line 2
baz

如何使用标准 Linux 工具(sed、awk、cat 等)在一行 bash 中完成此操作没有创建任何文件来保存foobar、 或baz?

答案1

在我的手机上打字,所以对草图、未经测试的答案表示歉意。

当然,您可以连接(cat)所有内容,就好像所有内容都是一个文件一样:

cat <( echo foo ) file1.txt <( echo bar ) file2.txt <( echo baz )

答案2

sh -c 'while [ $# -gt 0 ] ; do echo "$1" ; cat "${2:-/dev/null}" ; shift 2 2>/dev/null; done' - foo file1 bar file2 baz

一般来说,要求这是一行是相当愚蠢的,如果你把它放在 shell 函数或文件中,谁会关心它是否是一行呢?

答案3

在每个 Unix 机器上的任何 shell 中使用一个命令使用任何 awk

$ awk 'FNR==1{print x} 1; END{print x}' x='foo' file1 x='bar' file2 x='baz'
foo
file1 line 1
file1 line 2
bar
file2 line 1
file2 line 2
baz

相关内容