显示文件名后跟内容,无需交互

显示文件名后跟内容,无需交互

我的程序每 30 秒左右将其状态写入几个文件(覆盖),我想用像“更多”那样显示的文件名来查看它们。喜欢:

$ echo 1234 > test00
$ echo 5678 > test01
$ ls
test00  test01
$ more *
::::::::::::::
test00
::::::::::::::
1234
::::::::::::::
test01
::::::::::::::
5678

对于“更多”,您必须按空格才能获取下一个文件。

  • 我想要的是内容之前的文件名以某种方式
  • 我尝试了“tail”,但必须Ctrl+ C,可以编写一个小程序,但我想知道是否有任何标准的unix程序可以做到这一点(显示文件名,后跟文件内容),而无需像“更多”那样进行进一步的用户交互

答案1

如果输出more可以接受,只需将其通过管道传输cat

more * | cat

这将消除“更多”提示。

printf或者,您可以使用一行代码对显示进行更多控制:

for fn in *; do printf "::::::\n$fn\n:::::\n"; cat "$fn"; done

或作为脚本:

for fn in $*; 
do 
   printf "vvvvvvvvvv\n$fn\n^^^^^^^^^^\n"
   cat "$fn"
done

答案2

你可以做一些事情。

headtail都指定默认显示文件的前十行 - 但如果使用多个参数调用,将为所有行执行此操作并显示每个文件的文件名。当然,对于每个行,您可以使用参数-n[num]来指定除您想要显示的默认十行之外的行数。我假设您的 CTRL-C 问题与该-f选项有关- 该选项将指示tail跟踪文件 - 您可能应该将其忽略。

您可能会做的另一件事 - 这将导致输出与问题中的略有不同,但您可能仍然喜欢,是......

grep -F '' ./*files

grep当给定多个文件名参数时,还指定显示其匹配的文件名 - 但grep在每行的开头显示。喜欢

seq 10 >nums.txt; grep -F '' /dev/null nums.txt

...打印...

nums.txt:1
nums.txt:2
nums.txt:3
nums.txt:4
nums.txt:5
nums.txt:6
nums.txt:7
nums.txt:8
nums.txt:9
nums.txt:10

...并在我的终端上突出显示。这/dev/null只是一个小技巧,即使在仅处理单个文件时也可以强制执行多个文件参数行为,并且grep -F ''匹配每一行 - 即使是空白行。

这是head /dev/null nums.txt

==> /dev/null <==

==> nums.txt <==
1
2
3
4
5
6
7
8
9
10

tail在这种情况下,输出是相同的 - 但是,同样,这两个实用程序仅打印文件的这么多行。

使用最新版本的 GNU,sed您可以使用F以下命令:

sed -s 1F ./*files

...或者如果您想要文件名周围有一些边框...

sed -se '1!b;i\\n---' -e 'F;i\---\n' nums.txt

...确实喜欢...

---
nums.txt
---

1
2
3
4
5
6
7
8
9
10

或者如果你想冒险的话你可以......

tar -c ./*files | tr -s \\0 | cut -d '' -f1,2,13 | tr '\0' '\n'

...但这可能不切实际。

答案3

我会用awk

awk 'FNR==1{print "::::\n"FILENAME"\n::::"}1' *

答案4

替代catbat提供了多个文件内容的非常好的视图,包括文件名、分隔符和行号:

$ printf '%s\n' 1234 > test00

$ printf '%s\n' 5 67 8 > test01

$ bat test*
───────┬───────────────────────────────────────
       │ File: test00
───────┼───────────────────────────────────────
   1   │ 1234
───────┴───────────────────────────────────────
───────┬───────────────────────────────────────
       │ File: test01
───────┼───────────────────────────────────────
   1   │ 5
   2   │ 67
   3   │ 8
───────┴───────────────────────────────────────

相关内容