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

Alf*_*doG 7 filenames text

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

$ echo 1234 > test00
$ echo 5678 > test01
$ ls
test00  test01
$ more *
::::::::::::::
test00
::::::::::::::
1234
::::::::::::::
test01
::::::::::::::
5678
Run Code Online (Sandbox Code Playgroud)

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

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

Ant*_*hon 9

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

more * | cat
Run Code Online (Sandbox Code Playgroud)

这将消除“更多”提示。

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

for fn in *; do printf "::::::\n$fn\n:::::\n"; cat "$fn"; done
Run Code Online (Sandbox Code Playgroud)

或作为脚本:

for fn in $*; 
do 
   printf "vvvvvvvvvv\n$fn\n^^^^^^^^^^\n"
   cat "$fn"
done
Run Code Online (Sandbox Code Playgroud)


mik*_*erv 7

你可以做几件事。

head并且tail都规范默认显示文件的前十行/最后十行 - 但如果调用带有多个参数,则将为所有行执行此操作并显示每个文件的文件名。而且,当然,对于每个,您可以使用-n[num]参数指定要显示的默认十行以外的行数。我假设您的 CTRL-C 问题与-f选项有关 - 它会指示tail跟随文件 - 您可能应该忽略它。

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

grep -F '' ./*files
Run Code Online (Sandbox Code Playgroud)

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

seq 10 >nums.txt; grep -F '' /dev/null nums.txt
Run Code Online (Sandbox Code Playgroud)

...打印...

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
Run Code Online (Sandbox Code Playgroud)

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

这是head /dev/null nums.txt

==> /dev/null <==

==> nums.txt <==
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

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

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

sed -s 1F ./*files
Run Code Online (Sandbox Code Playgroud)

...或者如果你想在文件名周围加一点边框......

sed -se '1!b;i\\n---' -e 'F;i\---\n' nums.txt
Run Code Online (Sandbox Code Playgroud)

......这确实喜欢......

---
nums.txt
---

1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

或者,如果你想冒险,你可以...

tar -c ./*files | tr -s \\0 | cut -d '' -f1,2,13 | tr '\0' '\n'
Run Code Online (Sandbox Code Playgroud)

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