find . -type f |xargs grep -ae '^http' 我要实现此需求:仅显示内容,不显示文件
时间: 2024-10-09 19:04:07 浏览: 27
命令 `find . -type f | xargs grep -ae '^http'` 的作用是在当前目录下(`.` 表示当前目录)查找所有普通文件(`-type f`),然后将这些文件名传递给 `grep` 命令,`grep` 会在这些文件中搜索包含以 `http` 开头的行 (`-a` 表示忽略大小写,`-e` 表示指定模式)。如果找到匹配项,它会打印出来。
然而,这个命令确实会同时显示出文件名和内容。如果你只想看到含有 `http` 的行内容,而不想看到文件名,可以稍微调整命令:
```bash
grep -H -A 0 -e '^http' $(find . -type f)
```
这里添加了选项 `-H`(显示行号),`-A 0`(显示匹配行之后的0行),这样只会打印出匹配的行及其上下文(如果没有更多上下文,就只显示一行),`$(find ...)` 依旧负责寻找文件。但是,由于 `grep` 需要文件名作为输入,所以结果中仍然会有文件名,只是没有行号。
如果你想完全排除文件名,可以在终端里逐行查看,例如:
```bash
grep -ae '^http' $(find . -type f) | less
```
这会先运行 `grep`,然后通过 `less` 编辑器逐行查看结果,这样你可以按 `q` 键退出而不保存,不会显示文件名。
相关问题
eval执行 find . - type f | xargs grep -ilE 检索对象 | gawk ‘{print “检索对象:”$0}”。>> 输出文件。 提示没有大括号是为什么
这个命令行是一个Linux shell脚本,用于在一个目录下查找所有的文本文件(`type f`),然后对每个文件执行`grep`命令查找包含特定模式的内容,并将结果输出到另一个文件。这里的关键点包括`eval`、管道符`|`和`gawk`。
`eval`通常用于动态执行字符串内容作为命令,但它在这个上下文中的问题是它会直接执行接收到的字符串,而不是像预期那样作为一个完整的命令块。因此,当你尝试使用`eval`来构造并执行复杂的shell命令时,如果没有正确地用大括号`{}`包裹起来,它会当作一个单独的命令行片段来解析,而不会按照意图分隔成各个部分。
没有大括号导致了两个问题:
1. `grep -ilE`这部分没有被正确地视为一个整体命令,`grep`后面的选项可能会被误解或错误处理。
2. `gawk`代码块也没有被正确识别为独立的命令,`'{print "检索对象:" $0}'`会被立即当作一条命令执行,而不是作为`gawk`命令的一部分。
正确的做法应该是把整个复杂命令作为一个字符串传递给`eval`,并在需要的地方使用`{}`来创建真正的命令块。例如,如果要用`eval`,应该确保整个命令被正确地括号包围:
```bash
eval "$(find . -type f -exec grep -ilE 'your_pattern' {} \; | xargs gawk '{print "检索对象:" $0}') > output_file"
```
但是,由于`eval`的安全风险,推荐使用更安全的方式来构建这样的命令,如使用`xargs`直接执行,避免使用`eval`。
find ./ -type f | xargs grep 00000000000000102022120701988703
这是一个 Linux 命令,它的作用是在当前目录下查找包含字符串 "00000000000000102022120701988703" 的文件,并输出对应的行。
具体解释如下:
- `find ./ -type f`:在当前目录下查找所有类型为文件的内容。
- `|`:将上一个命令的输出,作为下一个命令的输入。
- `xargs grep 00000000000000102022120701988703`:将上一个命令的输出作为参数传递给 grep 命令,用于在文件中查找包含指定字符串的行。
执行该命令后,会在当前目录及其子目录下查找所有包含指定字符串的文件,并输出对应的行。
阅读全文