标签: grep

如何使用具有管道字符的模式对多个模式进行 grep?

我想在多个文件中找到与两种模式之一匹配的所有行。我试图通过键入来找到我正在寻找的模式

grep (foo|bar) *.txt
Run Code Online (Sandbox Code Playgroud)

但是外壳将它解释|为管道并在bar不是可执行文件时抱怨。

如何在同一组文件中搜索多个模式?

shell grep quoting regular-expression

764
推荐指数
7
解决办法
176万
查看次数

grep 可以只输出匹配的指定分组吗?

说我有一个文件:

# file: 'test.txt'
foobar bash 1
bash
foobar happy
foobar
Run Code Online (Sandbox Code Playgroud)

我只想知道“foobar”后面出现什么词,所以我可以使用这个正则表达式:

"foobar \(\w\+\)"
Run Code Online (Sandbox Code Playgroud)

括号表示我对 foobar 后面的单词特别感兴趣。但是当我执行 a 时grep "foobar \(\w\+\)" test.txt,我得到了与整个正则表达式匹配的整行,而不仅仅是“foobar 之后的单词”:

foobar bash 1
foobar happy
Run Code Online (Sandbox Code Playgroud)

我更希望该命令的输出如下所示:

bash
happy
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉 grep 只输出与正则表达式中的分组(或特定分组)匹配的项目?

grep text-processing regular-expression

442
推荐指数
7
解决办法
49万
查看次数

如何防止“grep”出现在 ps 结果中?

当我搜索一些不存在的进程时,例如

$ ps aux | grep fnord                          
wayne    15745  0.0  0.0  13580   928 pts/6    S+   03:58   0:00 grep fnord
Run Code Online (Sandbox Code Playgroud)

显然我不关心 grep - 这和搜索ps过程一样有意义!

如何防止 grep 出现在结果中?

grep ps

365
推荐指数
8
解决办法
21万
查看次数

使用 grep 计算出现的总次数

grep -c对于查找字符串在文件中出现的次数很有用,但它每行只计算每次出现一次。如何计算每行出现的多次?

我正在寻找比以下更优雅的东西:

perl -e '$_ = <>; print scalar ( () = m/needle/g ), "\n"'
Run Code Online (Sandbox Code Playgroud)

grep

313
推荐指数
3
解决办法
82万
查看次数

`grep`、`egrep` 和 `fgrep` 之间有什么区别?

谁能告诉我grep, egrep, 和之间的技术差异fgrep并提供合适的示例?

我什么时候需要使用grepover egrep,反之亦然?

grep regular-expression

294
推荐指数
4
解决办法
33万
查看次数

是什么让 grep 将文件视为二进制文件?

我的机器上有一些来自 Windows 系统的数据库转储。它们是文本文件。我正在使用 cygwin 来查看它们。这些似乎是纯文本文件;我用记事本和写字板等文本编辑器打开它们,它们看起来很清晰。但是,当我对它们运行 grep 时,它会说binary file foo.txt matches.

我注意到这些文件包含一些 asciiNUL字符,我认为它们是数据库转储中的工件。

那么是什么让 grep 认为这些文件是二进制的呢?的NUL性格吗?文件系统上有标志吗?我需要更改什么才能让 grep 显示匹配行?

grep

225
推荐指数
6
解决办法
16万
查看次数

如何在 PDF 文件中使用 grep?

有没有办法使用 grep 搜索 PDF 文件,而无需先在 Ubuntu 中转换为文本?

grep search pdf

207
推荐指数
7
解决办法
14万
查看次数

grep 可以返回真/假还是有其他方法

作为此脚本的一部分,我需要能够检查给定的第一个参数是否与文件的第一个单词匹配。如果是,则退出并显示错误消息;如果没有,请将参数附加到文件中。我了解如何编写if语句,但不了解如何grep在脚本中使用。我知道这grep看起来像这样

grep ^$1 schemas.txt
Run Code Online (Sandbox Code Playgroud)

我觉得这应该比我做的要容易得多。

我在声明中收到错误“参数太多” if。我摆脱了之间的空间grep -q,然后得到了一个预期的错误二元运算符。

if [ grep -q ^$1 schemas.txt ]
then
        echo "Schema already exists. Please try again"
        exit 1
else
        echo "$@" >> schemas.txt
fi
Run Code Online (Sandbox Code Playgroud)

grep

194
推荐指数
3
解决办法
53万
查看次数

如何通过 .gz 文件递归 grep?

我正在使用脚本定期下载将原始 .eml 压缩为 .gz 文件的 gmail 邮件。该脚本为每一天创建一个文件夹,然后将每条消息压缩到其自己的文件中。

我想要一种在这个档案中搜索“字符串”的方法。

单独的 Grep 似乎无法做到这一点。我也试过 SearchMonkey。

grep compression search recursive files

162
推荐指数
5
解决办法
39万
查看次数

仅返回匹配模式后的一行部分

因此,当我使用我正在处理的特定日志集时,拉开一个文件cat然后使用它grep来获取匹配的行只会让我走到这一步。它需要一种将行与模式匹配的方法,但仅在匹配后返回行的部分。比赛前后的部分将始终不同。我玩过使用sedor awk,但无法弄清楚如何过滤该行以在比赛前删除部分,或者在比赛后返回部分,两者都可以。这是我需要过滤的行的示例:

2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 }
Run Code Online (Sandbox Code Playgroud)

我需要的部分是“停滞”后的一切。

这背后的背景是我可以找出某些东西停顿的频率:

cat messages | grep stalled | wc -l
Run Code Online (Sandbox Code Playgroud)

我需要做的是找出某个节点停顿了多少次(由“停顿”之后每个冒号之前的部分表示。如果我只是为此(即 20 :)grep,它可能会返回软失败的行,但是没有停顿,这对我没有帮助。我只需要过滤停顿的部分,这样我就可以从那些停顿的节点中搜索特定节点。

出于所有意图和目的,这是一个带有标准 GNU 核心实用程序的 freebsd 系统,但我无法安装任何额外的东西来提供帮助。

grep sed text-processing

161
推荐指数
3
解决办法
57万
查看次数