Linux-grep

grep 简介

grep (global search regular expression_r(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用
正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,
支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不
再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送
到屏幕,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在
,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

  1. grep正则表达式元字符集(基本集)

^ 锚定行的开始 如:'^grep’匹配所有以grep开头的行。
$ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
. 匹配一个非换行符的字符如:'gr.p’匹配gr后接一个任意字符,然后是p。

  • 匹配零个或多个先前字符如:‘*grep’匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
    [] 匹配一个指定范围内的字符,如’[Gg]rep’匹配Grep和grep。
    [^] 匹配一个不在指定范围内的字符,如:‘[^A-FH-Z]rep’匹配不包含A-R和T-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。

  1. 用于egrep和 grep -E的元字符扩展集
  • 匹配一个或多个先前的字符。如:‘[a-z]+able’,匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。
    ? 匹配零个或多个先前的字符。如:'gr?p’匹配gr后跟一个或没有字符,然后是p的行。
    a|b|c 匹配a或b或c。如:grep|sed匹配grep或sed
    ()

    分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。
    x{m},x{m,},x{m,n}

    作用同x{m},x{m,},x{m,n}

  1. POSIX字符类

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。
要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

[:alnum:]

文字数字字符

[:alpha:]

文字字符

[:digit:]

数字字符

[:graph:]

非空字符(非空格、控制字符)

[:lower:]

小写字符

[:cntrl:]

控制字符

[:print:]

非空字符(包括空格)

[:punct:]

标点符号

[:space:]

所有空白字符(新行,空格,制表符)

[:upper:]

大写字符

[:xdigit:]

十六进制数字(0-9,a-f,A-F)
  1. Grep命令选项

-?

同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

-b,–byte-offset

打印匹配行前面打印该行所在的块号码。

-c,–count

只打印匹配的行数,不显示匹配的内容。

-f File,–file=File

从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。

-h,–no-filename

当搜索多个文件时,不显示匹配文件名前缀。

-i,–ignore-case

忽略大小写差别。

-q,–quiet

取消显示,只返回退出状态。0则表示找到了匹配的行。

-l,–files-with-matches

打印匹配模板的文件清单。

-L,–files-without-match

打印不匹配模板的文件清单。

-n,–line-number

在匹配的行前面打印行号。

-s,–silent

不显示关于不存在或者无法读取文件的错误信息。

-v,–revert-match

反检索,只显示不匹配的行。

-w,–word-regexp

如果被\<和\>引用,就把表达式做为一个单词搜索。

-V,–version

显示软件版本信息。
  1. 实例

要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。

$ ls -l | grep ‘^a’

通过管道过滤ls -l输出的内容,只显示以a开头的行。

$ grep ‘test’ d*

显示所有以d开头的文件中包含test的行。

$ grep ‘test’ aa bb cc

显示在aa,bb,cc文件中匹配test的行。

$ grep ‘[a-z]{5}’ aa

显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

$ grep ‘w(es)t.*\1’ aa

如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。
如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。

1、参数:
-I :忽略大小写
-c :打印匹配的行数
-l :从多个文件中查找包含匹配项
-v :查找不包含匹配项的行

-n:打印包含匹配项的行和行标

[root@master ~]# ls -l | grep -n ‘in*’ 【这里需要注意要加上单引号 2017/9/25 16:39】
3:-rw-r–r–. 1 root root 45537 8月 28 05:39 install.log
4:-rw-r–r–. 1 root root 10033 8月 28 05:35 install.log.syslog

【2017/9/25 16:41】
总结一点:我们在使用 ls 的时候是不需要加上单引号,这样做的目的都是为了快速找到需要的文件
[root@master ~]# ls -l in*
-rw-r–r–. 1 root root 45537 8月 28 05:39 install.log
-rw-r–r–. 1 root root 10033 8月 28 05:35 install.log.syslog

【2017/9/25 17:08】
问:如何快速定位到一个文本的一行

如:快速查询到warning这样关键字的行
[root@master ~]# grep ‘warning’ install.log 【这里也可以 grep ‘warn*’ install.log 表示匹配以warn开头的字符】
warning: libgcc-4.4.7-4.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

warning: %post(shared-mime-info-0.70-4.el6.x86_64) scriptlet failed, exit status 127

2、RE(正则表达式)
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
< 从匹配正则表达式的行开始
> 到匹配正则表达式的行结束
[ ] 单个字符;如[A] 即A符合要求
[ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
. 所有的单个字符

  • 所有字符,长度可以为0

3、举例

ps -ef | grep in.telnetd

root 19955 181 0 13:43:53 ? 0:00 in.telnetd

more size.txt size文件的内容

b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

more size.txt | grep ‘[a-b]’ 范围 ;如[A-Z]即A,B,C一直到Z都符合要求

b124230
b034325
a081016
a022021
a061048
b103303
a013386
b044525

more size.txt | grep ‘[a-b]’*

b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

more size.txt | grep ‘[b]’ 单个字符;如[A] 即A符合要求

b124230
b034325
b103303
b044525

more size.txt | grep ‘[bB]’

b124230
b034325
b103303
b044525
B081016
B103303
BADc2345

grep ‘root’ /etc/group

root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,tty,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
daemon::12:root,daemon

grep ‘^root’ /etc/group 匹配正则表达式的开始行

root::0:root

grep ‘uucp’ /etc/group

uucp::5:root,uucp
nuucp::9:root,nuucp

grep ‘<uucp’ /etc/group

uucp::5:root,uucp

grep ‘root$’ /etc/group 匹配正则表达式的结束行

root::0:root
mail::6:root

more size.txt | grep -i ‘b1…*3’ -i :忽略大小写

b124230
b103303
B103303

more size.txt | grep -iv ‘b1…*3’ -v :查找不包含匹配项的行

b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
a013386
b044525
m8987131
B081016
M45678
BADc2345

more size.txt | grep -in ‘b1…*3’

1:b124230
9:b103303
15:B103303

grep ‘$’ /etc/init.d/nfs.server | wc -l

128

grep ‘$’ /etc/init.d/nfs.server | wc –l 忽略正则表达式中特殊字符的原有含义

15

grep ‘$’ /etc/init.d/nfs.server

case “$1” in

/tmp/sharetab.$$
[ “xKaTeX parse error: Expected 'EOF', got '&' at position 19: …ype" != xnfs ] &̲& echo "path\tKaTeX parse error: Undefined control sequence: \t at position 4: res\̲t̲fstype\tKaTeX parse error: Undefined control sequence: \t at position 5: opts\̲t̲desc”

/tmp/sharetab. / u s r / b i n / t o u c h − r / e t c / d f s / s h a r e t a b / t m p / s h a r e t a b . /usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab. /usr/bin/touchr/etc/dfs/sharetab/tmp/sharetab.
/usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab
if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v ‘1*(#|$)’
if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] &&
if [ s t a r t n f s d − n e 0 ] ; t h e n e l i f [ ! − n " startnfsd -ne 0 ]; then elif [ ! -n " startnfsdne0];thenelif[!n"_INIT_RUN_LEVEL" ]; then
while [ $wtime -gt 0 ]; do
wtime=expr $wtime - 1
if [ $wtime -eq 0 ]; then
echo “Usage: $0 { start | stop }”

more size.txt

the test file
their are files
The end

grep ‘the’ size.txt

the test file
their are files

grep ‘<the’ size.txt

the test file
their are files

grep ‘the>’ size.txt

the test file

grep ‘<the>’ size.txt

the test file

grep ‘<[Tt]he>’ size.txt

the test file
The end

查询出所有的用户,然后通过管道命令 过滤出crm用户
[root@KFCS-PCRM ~]# who | grep -F crm
crm pts/1 2017-02-20 13:42 (46.1.1.89)

解决通过grep过滤还是如下显示
[oracle@spark1 ~]$ ps -ef | grep emnls
oracle 3312 1 0 10:48 pts/1 00:00:00 emnls
oracle 4241 2175 1 16:54 pts/1 00:00:00 grep emnls

[oracle@spark1 ~]$ ps -ef | grep emnls | grep -v grep;
oracle 3312 1 0 10:48 pts/1 00:00:00 emnls

只是显示出进程的名称
[oracle@spark1 ~]$ ps -ef | grep emnls | grep -v grep | awk ‘{print $8}’
emnls


  1. ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode | Binary search | 22. 74. 162. 33. 34. 153.

22. Generate Parentheses 要意识到只要还有左括号&#xff0c;就可以放到path里。只要右括号数量小于左括号&#xff0c;也可以放进去。就是valid的组合。recurse两次 74. Search a 2D Matrix 看成sorted list就好。直接用m*n表示最后一位的index&#xff0c;并且每次只需要 …

打印Winform控件实现简陋版的分页打印(C#)

本文的代码可以从这里获取&#xff1a;winformDemo.rar 张祥裕/分享的资源名称 - Gitee.com 作者的水平有限&#xff0c;如有错误&#xff0c;望指正。 为了简单起见&#xff0c;纸张大小&#xff0c;打印机等信息按照默认的来&#xff0c;本文的实现方案是&#xff1a;打印Pa…

C语言:反转一个单链表

Lei宝啊&#xff1a;个人主页 题目&#xff1a; 描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 接口&#xff1a; struct ListNode* reverseList(struct ListNode* head){} 示例&#xff1a; 输入&#xff1a; head [1…

“深入解析SpringBoot:从入门到精通“

标题&#xff1a;Spring Boot&#xff1a;从入门到精通 摘要&#xff1a;本文将深入解析Spring Boot框架&#xff0c;从入门到精通&#xff0c;带你了解Spring Boot的基本概念、核心特性和使用方法&#xff0c;并提供示例代码帮助你快速上手。 正文&#xff1a; 一、什么是S…

全局ip代理安全吗? 手机设置全局代理方法详解

全局IP代理并不一定是安全的&#xff0c;因为全局IP代理会将所有网络流量都通过代理服务器进行转发&#xff0c;包括敏感信息和隐私数据。如果代理服务器受到黑客攻击或存在安全漏洞&#xff0c;可能会导致数据泄露和其他安全问题。因此&#xff0c;在使用全局IP代理时&#xf…

Spring Boot项目的创建

hi 大家好,又见面了,今天继续讲解Spring Boot 文章目录 &#x1f436;1.什么是Spring Boot?&#x1f436;2.Spring Boot的优势&#x1f436;3.Spring Boot项目创建&#x1f33c;3.1使用ieda创建&#x1f95d;3.1.1下载插件Spring Boot Helper&#x1f95d;3.1.2创建项目 &…

VS创建wsdl服务提供给java调用

文章目录 前言1.c#创建asp.net web服务1.1 创建ASP.NET Web应用程序1.2 添加服务类1.3 定义服务方法1.3 浏览服务1.4 发布服务1.5 IIS部署服务 2.Java中调用服务2.1 用动态客户端工厂类调用2.1.1 引入依赖2.1.2 调用测试代码2.1.3 测试结果 2.2 创建代理类进行调用2.2.1 使用ws…

vue3 如何获取env

标题import.meta.env是一个全局属性&#xff0c;它包含了许多有用的环境信息&#xff0c;比如MODE、BASE_URL等。你可以在任何Vue组件、模块或文件中使用它来获取这些环境变量。 console.log(import.meta.env.MODE); // 获取当前模式&#xff0c;比如 development 或 producti…

解决Oracle锁表问题

问题描述&#xff1a; 数据表不能修改或删除数据&#xff0c;如果操作则会卡住&#xff0c;这可能是锁表了。 解决步骤&#xff1a; &#xff08;1&#xff09;查看哪个表被锁 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_object…

修改整数(有点坑,所以发出来了)

问题描述 小贝给了小聪一个正整数 x&#xff0c;但是小聪决定把这个数改掉。她可以把整数 x 每个位置上的数 t 改成 9-t。 请你帮助小聪来计算一下&#xff0c;如何把 x 改成一个最小的正整数&#xff0c;注意&#xff0c;不能出现首位为 0 的情况。 输入格式 输入一个正整数…

云原生环境下的安全风险与安全架构设计

随着云计算和容器技术的发展&#xff0c;云原生应用已经成为企业和开发者的新选择。然而&#xff0c;云原生环境也给企业带来了一系列安全挑战。本文将分析云原生环境下的安全风险&#xff0c;并提出相应的安全架构设计策略。 一、云原生环境下的安全风险 云原生环境具有动态性…

git:按照标签查询提交记录log日志

git log 可以查询提交历史&#xff0c;增加一些参数就可以对提交记录log日志进行过滤 # 查询标签v1.0.0之前提交的历史记录 git log v1.0.0 --prettyformat:"%s"# 查询标签v1.0.0之后提交的历史记录 git log v1.0.0.. --prettyformat:"%s"--prettyformat:…

ChatGLM-6B 部署与 P-Tuning 微调实战-使用Pycharm实战

国产大模型ChatGLM-6B微调部署入门-使用Pycharm实战 1.ChatGLM模型介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。结合模型量化技术&#xff0c;用户可以在消费级的显卡上进行本…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据

1.简介 上一篇主要就讲解和分享Fiddler断点的理论和操作&#xff0c;今天宏哥就用具体例子&#xff0c;将上一篇中的理论知识实践一下。而且在实际测试过程中&#xff0c;有时候需要修改请求或响应数据&#xff0c;或者直接模拟服务器响应&#xff0c;此时可以使用fiddler进行…

js的sendBeacon方法介绍

js的sendBeacon方法介绍 Beacon API是一种轻量级且有效的将网页活动记录到服务器的方法。它是一个 JavaScript API&#xff0c;可帮助开发人员将少量数据&#xff08;例如分析或跟踪信息、调试或诊断数据&#xff09;从浏览器发送到服务器。 在本文中&#xff0c;我们将介绍B…

容斥原理 训练笔记

​ 容斥原理 设S是一个有限集&#xff0c;A_1,A_2…A_n是S的n个子集&#xff0c;则 ∣ S − ⋃ i 1 n A i ∣ ∑ i 0 n ( − 1 ) i ∑ 1 ≤ j 1 < j 2 . . . < j i ≤ n ∣ ⋂ k 1 i A j k ∣ |S-\bigcup_{i1}^{n}A_i|\sum_{i0}^{n}(-1)^i\sum_{1\leq j_1< j_2.…

基于长短期神经网络LSTM的位移监测,基于长短期神经网络的位移预测,LSTM的详细原理

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的位移监测 完整代码: https://download.csdn.net/download/abc991835105/88098131 效果图 结果分析 展望 参考论文 背影 路径追踪预测,对实现自动飞行驾驶拥有重要意义,长短期神经网络是一种改进党的…

有效三角形的个数

给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 示例 2: 输入: nums [4,2,3,4] 输出: 4 代码如下&#xff1a;…

力扣75——队列

总结leetcode75中队列的算法题解题思路。 上一篇&#xff1a;力扣75——哈希表/哈希集合 以下代码大部分为本人所写&#xff0c;少部分为官方示例代码。 力扣75——队列 1 最近的请求次数2 Dota2 参议院1-2 解题总结 1 最近的请求次数 题目&#xff1a; 写一个 RecentCounter…

okvis

论文 Keyframe-Based Visual-Inertial SLAM Using Nonlinear Optimization 摘要 由于两种感知模式的互补性&#xff0c;视觉和惯性线索的融合在机器人中变得很流行。虽然迄今为止大多数融合策略都依赖于过滤方案&#xff0c;但视觉机器人界最近转向了非线性优化方法&#x…