是否可以使用 GNU grep 从表达式中获取匹配的组?
例子:
echo "foo 'bar'" | grep -oE "'([^']+)'"
Run Code Online (Sandbox Code Playgroud)
这将输出“'bar'”。但我只想得到“bar”,而不必再通过 grep 发送一次(即获取匹配的组)。那可能吗?
在 Powershell 中,如何列出目录(递归)中包含与给定正则表达式匹配的文本的所有文件?有问题的文件包含非常长的难以理解的文本行,所以我不想看到匹配的行——只是文件名。
我经常使用递归 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 这样的文件模式。如何排除目录?
当我想在当前目录中执行递归grep搜索时,我通常这样做:
grep -ir "string" .
Run Code Online (Sandbox Code Playgroud)
但是该命令会在各种文件中搜索,包括二进制文件(图片、音频、视频等),这会导致搜索过程非常缓慢。
例如,如果我这样做,它将不起作用:
grep -ir "string" *.php
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为当前目录中没有 PHP 文件,但在当前目录中的某些子目录中,并且子目录的名称不以“.php”结尾,因此 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)
有没有比设置别名更好的方法呢?
当我使用 find 命令时,我几乎总是需要搜索本地驱动器。但是,我几乎总是安装了超大的网络共享,并且这些都包含在搜索中。有没有一种简单的方法可以排除 find 命令、grep 和其他类似命令中的那些?例子:
查找 / -name .vimrc
作为我上一篇文章的延续,我曾经在那里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)
该文件已创建,但没有填充任何内容,这是缓存问题还是其他问题?我如何将尾部的输出实时附加到新文件中?
我正在尝试构建一个 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) 使用以下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 是否提供了一种计算匹配总数的方法?-c 选项只返回匹配正则表达式的行数,但在这种情况下,我每行有多个匹配项。
grep ×10
linux ×6
bash ×3
command-line ×3
regex ×2
console ×1
cygwin ×1
file-filter ×1
find ×1
ip-address ×1
logging ×1
mac ×1
macos ×1
powershell ×1
search ×1
terminal ×1
unix ×1