Grep linux 文件系统中的常规文件并显示其内容

Grep regular files in a linux File System and show their content

如何显示与grep命令匹配的普通文件的内容?例如,我 grep 一个目录以查看它拥有的常规文件。我使用下一行仅查看常规文件:

ls -lR | grep ^-

然后我想显示在那里找到的文件的内容。我该怎么做?

我会做类似的事情:

$ cat `ls -lR | egrep "^-" | rev | cut -d ' ' -f 1 | rev`
  • 使用 ls 查找文件
  • grep 找到您的模式
  • 反转整个结果
  • 截取第一个文件分隔字段得到文件名(带空格的文件有问题)
  • 将文件名反转回正常方向
  • 反引号将执行它,return 文件名列表到 cat。

或者我可能采用的方法是使用 vim 查看每个文件。

$ vim `ls -lR | egrep "^-" | rev | cut -d ' ' -f 1 | rev`

感觉就像你试图递归地只查找文件。这就是我在这些情况下所做的:

$ vim `find . -type f -print`

有多种方法可以做到这一点。将尝试在这里为您提供一些简单而干净的方法。他们都用 space.

处理文件名

$ 找到 . -类型 f -print0 | xargs -0 cat

-print0 添加了一个空字符 '\0' 分隔符,您需要调用 xargs -0 来识别空分隔符。如果不这样做,文件名中的 whitespace 会产生问题。

例如没有 -print0 文件名:abc 123.txt1.inc 将被读取作为三个单独的文件 abc123.txt1.inc.

with -print0 这变成 abc 123.txt'\0'1.inc'\0' 将被读作 abc 123.txt1.inc

至于xargs,它可以接受输入作为参数。命令 1 | xargs command2 表示 command1 的输出传递给 command2.

cat 显示文件内容。

$ 找到 . -type f -exec echo {} \; -exec cat {} \;

这只是使用查找命令。它找到所有文件(类型 f),调用 echo 输出文件名,然后调用 cat 显示其内容。

如果您不需要文件名,请省略 -exec echo {} \;

或者您可以使用 cat 命令并传递 find 的输出。

$ 猫`找到。 -type f -print`

如果你想一个一个地滚动浏览多个文件的内容。你可以使用。

$ 少`找。 -type f -print`

使用 less 时,您可以通过 :n 和 :p 分别导航下一个和上一个文件。按 q 退出 less.