0029. shell命令--grep

Linux内存时序与SPD信息查看指南:从dmidecode到decode-dimms 内存时序是衡量内存性能的关键参数,它定义了内存执行读写操作所需的时钟周期延迟,直接影响系统的响应速度和带宽。其原理基于内存控制器与DRAM颗粒之间的信号同步,通过CL、tRCD、tRP、tRAS等时序参数精细控制数据访问流程。优化内存时序能显著降低延迟,提升游戏、数据库及科学计算等延迟敏感型应用的性能。在服务器运维、高性能计算和硬件调试等场景中,准确获取内存的SPD信息和实时时序至关重要。本文聚焦于Linux环境下,如何利用dmidecode、decode-dimms等工具链,深入探查内存的XMP配置、JE 阅读详情

目录

29. shell命令--grep

功能说明

语法格式

选项说明

实践操作

注意事项


29. shell命令--grep

功能说明

        grep、egrep 和 fgrep 是 Linux 和 Unix 系统上用于文本搜索的强大工具。这些命令允许用户搜索文件中的特定模式,并打印出匹配该模式的行。虽然 grep、egrep 和 fgrep 在功能上有所不同,但它们都是基于正则表达式的搜索工具。

        grep 命令来自英文词组 global search regular expression and print out the line 的缩写,意思是用于全面搜索的正则表达式,并将结果输出。人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵‍活。

        与之容易混淆的是 egrep 命令和 fgrep 命令。如果把 grep 命令当作标准搜索命令,那么 egrep 则是扩展搜索命令,等价于 grep -E 命令,支持扩展的正则表达式。而fgrep则是快速搜索命令,等价于 grep -F 命令,不支持正则表达式,直接按照字符串内容进行匹配。

grep

        grep 是 Global Regular Expression Print 的缩写,用于在文本文件中搜索指定的模式,并将包含该模式的行打印到标准输出。默认情况下,grep 使用基础正则表达式(BRE, Basic Regular Expression)。

        不过,现代版本的 grep 通常支持 -E 选项来启用扩展正则表达式的功能,因此很多用户直接使用 grep -E 而不是 egrep。

egrep

        egrep 是 Extended Global Regular Expression Print 的缩写,与 grep 类似,但默认使用扩展正则表达式(ERE, Extended Regular Expression)。扩展正则表达式提供了更多的功能和更灵活的匹配方式。

fgrep

        fgrep 是 Fixed Global Regular Expression Print 的缩写,与 grep 类似,但它将模式视为固定字符串,而不是正则表达式。这意味着你可以搜索字面字符串,而无需担心正则表达式中的特殊字符。

        但是,你也可以使用 grep -F 来达到相同的效果。

语法格式

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

选项说明

-a --text  # 不要忽略二进制数据。
-A <显示行数>   --after-context=<显示行数>   # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b --byte-offset                           # 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-B<显示行数>   --before-context=<显示行数>   # 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c --count    # 计算符合范本样式的列数。
-C<显示行数> --context=<显示行数>或-<显示行数> # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> --directories=<动作>  # 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> --regexp=<范本样式>   # 指定字符串作为查找文件内容的范本样式。
-E --extended-regexp             # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> --file=<规则文件>     # 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F --fixed-regexp   # 将范本样式视为固定字符串的列表。
-G --basic-regexp   # 将范本样式视为普通的表示法来使用。
-h --no-filename    # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H --with-filename  # 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i --ignore-case    # 忽略字符大小写的差别。
-l --file-with-matches   # 列出文件内容符合指定的范本样式的文件名称。
-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。
-n --line-number         # 在显示符合范本样式的那一列之前,标示出该列的编号。
-P --perl-regexp         # PATTERN 是一个 Perl 正则表达式
-q --quiet或--silent     # 不显示任何信息。
-R/-r  --recursive       # 此参数的效果和指定“-d recurse”参数相同。
-s --no-messages  # 不显示错误信息。
-v --revert-match # 反转查找。
-V --version      # 显示版本信息。   
-w --word-regexp  # 只显示全字符合的列(精准匹配这整词)。
-x --line-regexp  # 只显示全列符合的列(精准匹配这整行)。
-y # 此参数效果跟“-i”相同。
-o # 只输出文件中匹配到的部分。
-m <num> --max-count=<num> # 找到num行结果后停止查找,用来限制匹配行数

正则表达式

^    # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。    
$    # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。
.    # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。匹配任意单个字符,也可以是一个汉字    
*    # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。    
.*   # 一起用代表任意字符。   
[]   # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。    
[^]  # 匹配一个不在指定范围内的字符,如:'[^A-Z]rep' 匹配不包含 A-Z 中的字母开头,紧跟 rep 的行
\(..\)  # 标记匹配字符,如'\(love\)',love被标记为1。    
\<      # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。    
\>      # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。    
x\{m\}  # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。    
x\{m,\}   # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。    
x\{m,n\}  # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。   
\w    # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。   
\W    # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。   
\b    # 单词锁定符,如: '\bgrep\b'只匹配grep。  
\S     #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s     #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

实践操作

0. 环境准备
mkdir -p /test/grep
cd /test/grep

1. 搜索指定文件中包含某个关键词的内容行
grep "root" /etc/passwd
grep bin /etc/passwd

2. 搜索指定文件中以某个关键词开头的内容行
grep ^root /etc/passwd
grep ^mail /etc/passwd
 
3. 搜索指定文件中以某个关键词结尾的内容行
grep bash$ /etc/passwd
grep nologin$ /etc/passwd

4. 搜索多个文件中包含某个关键词的内容行
grep root /etc/passwd /etc/shadow

5. 搜索多个文件中包含某个关键词的内容,不显示文件名称
grep -h root /etc/passwd /etc/shadow

6. 显示指定文件中包含某个关键词的行数量
grep -c root /etc/passwd /etc/shadow

7. 搜索指定文件中包含某个关键词位置的行号及内容行
grep -n sbin /etc/passwd

8. 搜索指定文件中不包含某个关键词的内容行
grep nologin /etc/passwd
grep -v nologin /etc/passwd    #取反

9. 搜索指定工作目录中包含某个关键词内容的文件,未找到则提示
grep root /etc/
grep root /etc/*
grep -l root /etc/*
grep root /etc/* |wc -l
grep -l root /etc/* |wc -l

10. 搜索指定工作目录中包含某个关键词内容的文件,未找到也不提示
grep -sl root /etc/*

11. 不仅搜索指定目录,还搜索其内子目录内是否有关键词文件
grep -srl root /etc/
grep -sl root /etc/* |wc -l
grep -srl root /etc/* |wc -l 
 
12. 搜索指定文件中精准匹配到某个关键词的内容行
echo -e "cd\ncdrom\ncd rom"

echo -e "cd\ncdrom\ncd rom" |grep "cd"
echo -e "cd\ncdrom\ncd rom" |grep -w "cd"   #精准匹配整个关键字
echo -e "cd\ncdrom\ncd rom" |grep -x "cd"   #精准匹配关键字的行

13. 判断指定文件中是否包含某个关键词,通过返回状态值输出结果(0为包含,1为不包含),一般用于条件测试
grep -q root /etc/passwd
echo $?
grep -q rooot /etc/passwd
echo $?

14. 搜索指定文件中符合条件的行数
grep -c ^$ /etc/profile    #空行总行数
grep -c ^$ /etc/passwd    #空行总行数
grep root /etc/passwd
grep -c root /etc/passwd    #包含root的总行数
grep root /etc/passwd |wc -l    #这样也可以统计

15. 只输出文件中匹配到的部分
grep root /etc/passwd
grep -o root /etc/passwd   

16. 打印样式匹配所位于的字符或字节偏移
#一行中字符串的字符偏移是从该行的第一个字符开始计算,起始值为0。
#选项 -b -o 一般总是配合使用
echo 123456789 |grep -o -b 5    
echo 1234 56789 |grep -o -b 5
grep root /etc/passwd
grep -o -b root /etc/passwd

17. 忽略匹配样式中的字符大小写
echo "hello world" | grep "HEllo"
echo "hello world" | grep -i "HEllo"

18. 选项 -e 制动多个匹配样式
echo this is a test line 
echo this is a test line | grep -e "is" -e "line"
echo this is a test line | grep -e "is" -e "line" -o

#也可以使用 -f 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符
echo -e "aaa\nbbb" >patfile
cat patfile
echo aaa bbb ccc ddd
echo aaa bbb ccc ddd |grep -f patfile
echo aaa bbb ccc ddd |grep -f patfile -o

19. 在grep搜索结果中包括或者排除指定文件
echo test >file.html
echo test >file.php
echo test >file.txt
head -v file*

#只在当前目录中所有的 .php 和 .txt 文件中递归搜索字符 test
grep test . -r --include=*.{php,txt}    

#在搜索结果中排除所有 .bash_history 文件里的内容
grep test . -r
cp ~/.bash_history .
grep test . -r --exclude .bash_history

#在搜索结果中排除 filelist 文件列表里的文件
echo .bash_history >filelist
cat filelist
grep test . -r --exclude-from filelist
grep test . -r --exclude-from=filelist

20. 使用0值字节后缀的grep与xargs
echo aaa >file1
echo bbb >file2
echo aaa >file3
head -v file1 file2 file3

# grep 输出用 -Z 选项来指定以 0 值字节作为终结符文件名(\0),
# xargs -0 读取输入并用0值字节终结符分隔文件名,
#-Z 通常和 -l 结合使用
grep aaa file*
grep aaa file* -l
grep aaa file* -lZ  
grep aaa file* -lZ |xargs -0
grep aaa file* -lZ |xargs -0 ls -l
grep aaa file* |xargs -0 ls -l
grep aaa file* -lZ |xargs -0 echo >> bbb
ls
cat bbb

21. 打印出匹配文本之前或者之后的行
seq 10
seq 10 |grep '5' -A 3    #显示匹配某个结果之后的N行
seq 10 |grep '5' -B 3    #显示匹配某个结果之前的N行
seq 10 |grep '5' -C 3    #显示匹配某个结果的前N行和后N行
echo -e "a\nb\nc\na\nb\nc"
echo -e "a\nb\nc\na\nb\nc" |grep 'a' -A 0    #如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符
echo -e "a\nb\nc\na\nb\nc" |grep 'a' -A 1
echo -e "a\nb\nc\na\nb\nc" |grep 'a' -A 2

注意事项

  • egrep 和 fgrep 在很多系统上可能是 grep 的符号链接或别名,因此使用 grep -E 和 grep -F 可能是更可移植的方法。
  • 正则表达式可以非常复杂,因此在使用这些工具时,了解正则表达式的语法和功能是非常重要的。
  • 这些命令都支持大量的选项和参数,用于控制搜索的各个方面,如大小写敏感性、递归搜索等。你可以通过运行 man grep 来查看完整的文档和选项列表。
RV1103/RV1106蓝牙开发避坑实录:Buildroot 2023.02.6集成BlueZ5,手把手解决编译报错 本文详细介绍了在RV1103/RV1106平台上使用Buildroot 2023.02.6集成BlueZ5蓝牙协议栈的全流程,包括环境配置、依赖处理、典型编译错误解决方案及性能优化技巧,帮助开发者高效完成蓝牙功能开发。 阅读详情

相关推荐

安卓逆向工程实战指南:从APK结构到动态调试与脱壳

逆向工程是一种通过分析已编译程序来理解其内部结构、运行逻辑与安全机制的技术。其核心原理在于将二进制代码或字节码转换为可读形式,从而揭示软件的设计思路与数据流。这项技术的价值在于,它不仅是移动安全领域进行漏洞挖掘、恶意软件分析和隐私审计的基石,也为开发者提供了验证自身代码防护效果、学习优秀架构设计的途径。在实际应用场景中,安卓应用(APK)作为主要分析对象,其内部包含关键的DEX字节码、资源文件和原生库。掌握静态分析工具链(如JADX)与动态调试框架(如Frida),能够有效应对代码混淆与加固等挑战,实现对应

weixin_34239592的博客 406

shell-grep -v 排除多个输出结果

ps -fe|grep pktgen | grep -vE '(grep|/bin/bash)'-v:显示不包含匹配文本的所有行。反向查找。-E 使用扩展正则表达式

jpmsdn的专栏 3万+

shellshell-grep -v 排除多个输出结果

1.概述 例如需要排除 abc.txt 中的 mmm nnn grep -v 'mmm\|nnn' abc.txt 反向排除 grep -v '^mmm\|nnn' abc.txt

九师兄 2369

linux shell grep 如何去除它自己

问题: 在Linux shell编程中,常会用到grep命令对进程等进行关键字搜索,然后会对结果列表进行后处理,比如提取进程号等,再做进一步的处理。但是,grep结果会包含grep自己在内: [docker@shanghai tmp]$ ps -ef | grep ssh root 1088 1 0 08:43 ? 00:00:00 /usr/sbin/ssh...

hongweigg的专栏 1万+

shell】用 grep 查找包含字符串的文件|grep 过滤|取匹配行的前后n行

目录 目录 即可即用 grep 匹配多个关键字 与find的不同 grep检索文件内容详解 grep指定搜索的文件类型 grep 不起作用?过滤了还是显示 匹配特定的列 指定在哪些文件/哪类文件/哪个目录里搜索 搜索时包含/排除哪类文件 搜索时排除指定目录 指定在哪些文件里搜索|只在find到的文件里搜索 更多过滤 搜索...

小鱼菜鸟的博客 7175

Linux grep 命令

grep 是工作中最常使用的命令之一,但是有时候会有不同的搜索要求,例如不搜索某个目录,或者只搜索java文件,等等。 grep 的内容其实挺多,但是本文只讲解日常工作中可能使用到的功能,然而如果你遇到了其它的一些不知道的功能,你可以查询 grep 手册来了解。 语法 grep 命令的语法如下 grep [option...] [patterns] [file...] grep命令会输出匹配 pattern 的所有行,其中 pattern 默认使用的是 POSIX 的基本正则表达式。 如果在 shell

不惜留恋_ 1442

adb 命令获取点击位置坐标

0035(宽) max 1602 0036(高) max 2503 adb -s bd3ea87f shell getevent -p | grep -e "0035" -e "0036" 0035 : value 0, min 0, max 1080, fuzz 0, flat 0, resolution 0 0036 : value 0, min 0, max 1920, fuzz 0, flat 0, resolution 0 adb -s bd3ea87f shell wm size .

Anne_Wei的专栏 3593

笔记3

----------------------------------------------------------------------------------------------------------[root@localhost httpd]# cd /var/log/httpd/----------------------------------------------------...

weixin_30478757的博客 94

grep指令详解

shell grep指令 grep 参数: -r 递归文件夹,从当前文件夹向下递归查找所有子文件夹中的文件(不包含链接文件,包含二进制文件,文本等)。 -n 匹配到具体字符串后,显示字符串在文本中的行数,或者是组合指令中显示匹配的字符串是在上一个指令输出的第几行。 -w 精准匹配字符串,必须完全符合。 -i 忽略大小写,可以和 -w 一起使用 -o 参数只输出匹配到的字符串, 例如: grep -wo “impact” warning.txt 只会输出全部匹配到的 impact 字

m0_50668851的博客 3415

shell脚本之grep命令

shellgrep命令

techenliu的博客 1759

GREP命令常见用法

常用参数: -a #不要忽略二进制数据 -A #除了显示符合范本样式的那一行之外,并显示该行之后的内容 -b #在显示符合范本样式的那一行之外,并显示该行之前的内容 -B #除了显示符合样式的那一行之外,并显示该行之前的内容 -c #计算符合范本样式的列数 -C #除了显示符合范本样式的那一列之外,并显示该列之前后的内容 -d #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作 -e #指定字符串作为查找文件内容的范本样式 -E #将范本样式为延伸的普

qq_40907977的博客 2万+

Shell中的grep命令详解

简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep命令只跟grep有很小不同。egrepgrep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则

木牛的博客 1万+

grep查找时,去掉grep本身那一条

grep 查找时,总会显示本身那一条,比如要查找netifd这个进程的运行状态,去掉本身那一条,可以如下shell操作: ps  -aux | grep netifd | grep -v grep 查找文件中关键字CFG_BOOT,shell如下: grep CFG_BOOT* ./* -r...

chenangle56的专栏 6163

shellgrep命令用法详解

grep是 Unix 和类 Unix 操作系统(如 Linux 和 macOS)中的一个命令行工具,用于在文本文件中搜索符合指定模式的字符串。grep的名字来源于全局正则表达式打印(Global Regular Expression Print)的缩写,但现在的grep通常用于表示“搜索文本并打印匹配的行”。

浩瀚之水的专栏 3752

Linux常用命令——grep

grep 文本过滤工具 语法格式:grep 【options】【pattern】【file】 grep [参数] [匹配模式] [查找的文件]注意:1.grepLinux 系统中最重要的命令之一,其功能是从文本文件或管道数据流中筛选匹配的行及数据。2.grep 命令里的匹配模式或模式匹配,都是你要好找的东西,可以是普通的文字符号也可以是正则表达式。参数选项: 参数 说明 -c...

weixin_34221332的博客 2114

shell获取某一行中指定字符后的内容

比如有个xxx.txt文件,里面有很多行内容,其中有行内容为ro.xxx=123,要想获取到123这个值,可以如下处理 #!/bin/sh NAME=`cat xxx.txt | grep 'ro.xxx' | awk -F '=' '{print $2}'` echo $NAME ...

楼中望月 2万+

shell的正则表达式------grep

一、正则表达式:匹配的是文本内容(文本三剑客:grep:过滤文本内容 sed:针对文本内容进行增删改查 awk:按行取列)三、1.正则表达的作用:由一类特殊字符以及文本字符所编写的一个模式,模式又来匹配文件当中的内容(字符)。主要匹配的是文件内容及命令结果。grep -R:递归目录下,所有包含过滤内容的文件以及匹配的内容行,包括软连接。uniq -c:合并连续重复的行,不连续的不合并,并且统计重复行的次数。grep -C 数字 +内容 :匹配文件内容及内容的上下几行。

Alone8046的博客 1399

Shell中的文本过滤命令-grep

.grep的作用 全称:Global search regular expression and print out the line 全面搜索研究正则表达式并显示出来 作用:grep命令是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到行。由正则表达式或者字符及基本文本字符所编写的过滤条件 二.grep的使用 1.使用命令 -i ##忽略字母大小写 -v ##条...

weixin_44822212的博客 1031
上一篇: 0028. shell命令--tr
下一篇: 0030. shell命令--join
MineGi
博客等级 码龄9年 1853粉丝 144原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MineGi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值