我正在寻找一个 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 中完成此操作没有创建任何文件来保存foo
、bar
、 或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