标签: grep

GNU Grep 可以输出选定的组吗?

是否可以使用 GNU grep 从表达式中获取匹配的组?

例子:

echo "foo 'bar'" | grep -oE "'([^']+)'"
Run Code Online (Sandbox Code Playgroud)

这将输出“'bar'”。但我只想得到“bar”,而不必再通过 grep 发送一次(即获取匹配的组)。那可能吗?

linux grep

56
推荐指数
3
解决办法
8万
查看次数

Powershell 等效于 `grep -r -l` (--files-with-matches)

在 Powershell 中,如何列出目录(递归)中包含与给定正则表达式匹配的文本的所有文件?有问题的文件包含非常长的难以理解的文本行,所以我不想看到匹配的行——只是文件名。

powershell grep

55
推荐指数
1
解决办法
4万
查看次数

递归 grep:排除特定目录

我经常使用递归 grep 来查找具有特定内容的源文件。

grep -Rni "myfunc" .
Run Code Online (Sandbox Code Playgroud)

在大型代码库上,这可能会变慢,所以我使用 --incldue 来限制/白名单扩展。

grep -Rni --include=*.java "myfunc" .
Run Code Online (Sandbox Code Playgroud)

但是,排除(修剪)整个子目录会更有效,我在想:

grep -Rni --exclude=/.svn/ "myfunc" .
Run Code Online (Sandbox Code Playgroud)

但是 --exclude 只支持像上面的 *.java 这样的文件模式。如何排除目录?

linux grep command-line

52
推荐指数
3
解决办法
6万
查看次数

如何使用通配符“grep”递归过滤所需文件的名称?

当我想在当前目录中执行递归grep搜索时,我通常这样做:

grep -ir "string" .
Run Code Online (Sandbox Code Playgroud)

但是该命令会在各种文件中搜索,包括二进制文件(图片、音频、视频等),这会导致搜索过程非常缓慢。

例如,如果我这样做,它将不起作用:

grep -ir "string" *.php
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为当前目录中没有 PHP 文件,但在当前目录中的某些子目录中,并且子目录的名称不以“.php”结尾,因此 grep 不会查看其中的内容。

那么,如何从当前目录进行递归搜索,同时指定文件名通配符?(即:只搜索以特定扩展名结尾的文件)

linux bash grep command-line file-filter

52
推荐指数
2
解决办法
7万
查看次数

如何在 Mac OS X 的终端中使用颜色 grep?

我最近发现在 Mac OS XI 上可以在我的 shell 中设置它,~/.profile这样当我使用grep它时会以彩色(白色和红色)打印匹配项。

alias grep='GREP_COLOR="1;37;41" LANG=C grep --color=auto'
Run Code Online (Sandbox Code Playgroud)

但是设置别名似乎是一种黑客方法来做到这一点。以前我试过没有运气:

export GREP_COLOR=always           # works fine in Linux
Run Code Online (Sandbox Code Playgroud)

然后我也尝试过:

export GREP_COLOR="1;37;41"
Run Code Online (Sandbox Code Playgroud)

有没有比设置别名更好的方法呢?

mac terminal grep console macos

49
推荐指数
1
解决办法
3万
查看次数

find / grep 命令而不搜索已安装的共享

当我使用 find 命令时,我几乎总是需要搜索本地驱动器。但是,我几乎总是安装了超大的网络共享,并且这些都包含在搜索中。有没有一种简单的方法可以排除 find 命令、grep 和其他类似命令中的那些?例子:

查找 / -name .vimrc

linux grep find

41
推荐指数
2
解决办法
5万
查看次数

将“tail -f”输出写入另一个文件

作为我上一篇文章的延续,我曾经在那里grep & tail -f找到“罕见”事件的发生。我想把它记录在另一个文件中。

我试过转

tail -f log.txt | egrep 'WARN|ERROR'
Run Code Online (Sandbox Code Playgroud)

进入

tail -f log.txt | egrep 'WARN|ERROR' | tee filtered_output.txt
Run Code Online (Sandbox Code Playgroud)

该文件已创建,但没有填充任何内容,这是缓存问题还是其他问题?我如何将尾部的输出实时附加到新文件中?

cygwin bash grep logging

40
推荐指数
2
解决办法
6万
查看次数

grep 表示“术语”并排除“另一个术语”

我正在尝试构建一个 grep 搜索来搜索一个术语,但排除具有第二个术语的行。我想使用多个-e "pattern"选项,但这没有用。

这是我尝试过的命令及其生成的错误消息的示例。

grep -i -E "search term" -ev "exclude term"
grep: exclude term: No such file or directory
Run Code Online (Sandbox Code Playgroud)

在我看来,这-v适用于所有搜索词/模式。由于此运行但随后不包含search term在结果中。

grep -i -E "search term" -ve "exclude term"
Run Code Online (Sandbox Code Playgroud)

linux search bash grep

40
推荐指数
3
解决办法
9万
查看次数

我可以使用什么正则表达式来匹配 IP 地址?

使用以下grep语法,我想匹配文件中的所有 IP 地址(来自ksh脚本)

  grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file
Run Code Online (Sandbox Code Playgroud)

问题:它还匹配具有超过 4 个八位字节的单词 (IP):

1.1.1.1.1 
Run Code Online (Sandbox Code Playgroud)

或者

192.1.1.1.160
Run Code Online (Sandbox Code Playgroud)

如何将有效IP 和仅具有 4 个八位字节的 IP 地址匹配?如果grep不起作用,我也可以使用 Perl——一种单行语法解决方案。

grep regex ip-address

36
推荐指数
5
解决办法
15万
查看次数

使用grep计算匹配的总数而不是匹配的行数

grep 是否提供了一种计算匹配总数的方法?-c 选项只返回匹配正则表达式的行数,但在这种情况下,我每行有多个匹配项。

linux unix grep regex command-line

32
推荐指数
2
解决办法
4万
查看次数