IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux中grep命令以及正则的使用 -> 正文阅读

[系统运维]linux中grep命令以及正则的使用

grep命令使用方法

在linux中,我们可以使用grep去筛选我们所需要的列。
linux中可以分为基本正则表达式grep,拓展正则表达式egrep,不支持正则表达式fgrep。虽然fgrep不支持正则表达式,但是他的处理文本的速度是最快的。

grep的使用

grep [option] 'pattern' FILE

option:
--color=auto   符合条件的字符串用高亮红色显示
export GREP_COLOR='01;34'   前景色;背景色
grep匹配出来的颜色会变
-v: 反向选取,只显示不符合模式的行
-o:只显示被模式匹配到的字串,而不是整个行
-i:匹配时,不区分字符大小写
-E:使用扩展的正则表达式
-A #:显示匹配到的行时,顺带显示其后面的#个行
    -A 2
-B #:显示匹配到的行时,顺带显示其前面的#个行
-C #:显示匹配到的行时,顺带显示其前后的#个行
-r  递归搜索

pattern:  如果使用变量,则用双引号;不加引号,则全部当成字符处理

示例:

1.查看1.txt中空白行
grep '^$' 1.txt

2.筛选rc.sysinit中出非空白行
grep -v "^$" /etc/rc.d/rc.sysinit

3.显示/proc/meminfo文件夹下不区分大小写s开头的行

[root@node1 ~]# grep "^[sS].*" /proc/meminfo 
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:             84372 kB
Slab:             198192 kB
SReclaimable:     139628 kB
SUnreclaim:        58564 kB

4.显示/etc/passwd中国以nologin结尾的行

[root@node1 ~]# grep "nologin$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin

4.1取出默认shell为sbin/nologin的用户列表

[root@node1 ~]# grep "sbin/nologin$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

4.2取出默认shell为bash,且用户ID号最小的用户的用户名

[root@node1 ~]# grep "/bin/bash" /etc/passwd | cut -d ":" -f 1 | head -1
root

5.显示/etc/inittab中以#开头,且后面跟着一个或多个空白字符,而后面又跟着任意非空白字符的行

[root@node1 ~]# grep "^#\s\{1,\}\S\{1,\}" /etc/inittab 
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# systemctl get-default
# To set a default target, run:
# systemctl set-default TARGET.target
或者
[[:space:]]\{1,\}[^[:space:]]\{1,\}

4.显示/etc/inittab中包含:一个数字:的行
grep ":\d:" /etc/inittab

5.显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行
grep "^\s\{1,\}" /boot/grub/grub.conf

6.显示/etc/inittab文件中以一个数字开头并以一个与开头数字相投的数字结尾的行
[root@node1 ~]# grep "^\([0-9]\).*\1$" /etc/inittab

7.找出某文件中的1位数,或2位数

grep "\<[0-9]\{1,2\}\>" /etc/inittab 或者
grep -w "[[:digit:]]\{1,2\}"  /etc/inittab 

8.找出ifconfig命令结果中的1-255之间的整数

ifconfig | grep "[1-2]\?[0-9]\{0,2\}"

[root@node1 ~]# ifconfig | grep "[1-2]\?[0-9]\{0,2\}" -o
33
41
63
150
0
10
0
0
128
255
255

9.查找当前系统上名称为student(必须出现在行首)的用户的账号的相关信息,文件为/etc/passwd

grep "^student:" /etc/passwd
grep "^\<student\>" /etc/passwd

linux中基本正则表达式

跟我们在其他语言中的正则表达式有一点区别
比如:

  • 问号,分组的左右小括号,匹配数量的大括号,锚定词尾和词首的尖括号都要要用\转义。
  • 可以用\1代表匹配前面第一个括号中的内容
^string  锚定行首符合条件的内容
string$ 锚定行尾符合条件的行
.:匹配任意单个字符
*:匹配紧挨着其前面的任意次
[]:匹配指定范围内的任意单个字符  
     [a-z],[0-9],[:lower:],[:upper:],[:digit:],[:alpha:],[:alnum:],[:space:],[:punct:],
[^]:匹配指定范围外的任意字符
\?:匹配紧挨在其前面的字符0次或1次   写法 a\?b
\{m,n\}:匹配其前面的字符至少m次,至多n次
    匹配至多3次 \{0,3\}
    匹配至少3次 \{3,\}
    匹配3次 \{3\}
\<: 锚定词首   \<pattern 
     \b: \bpattern
\>: 锚定词尾  pattern\>
     \b: pattern\b
\<pattern\>:锚定词首
\bpattern\b:锚定词尾
\(\): 分组  \(pattern\)    
     \(ab\)\{1,3\}: 可以匹配多个ab组合
     \(a.b\).*\1 : 可以引用,\1引用第一个括号内容,\2引用第二个括号内容

示例:

1.匹配第2和4个单词相等的行

He like his liker;
He love his liker;
She love her lover;
She like her lover;

使用\(\l..e\).*\1r正则表达式,即可匹配第一行和第三行。

扩展正则表达式

使用grep -e 或egrep,不需要反斜线转义?

 +:匹配其前面的字符至少1次
 ?:匹配其前面的字符0次或1次
 {m,n}:至少m次,至多n次
 (): 分组,支持引用\1,\2
 a|b: 匹配a或者匹配b 
 词首词尾锚定,必须要\转义
 \<: 锚定词首
 \>: 锚定词尾
 ^: 匹配开头
 $: 匹配结尾

示例

1.查找以s或S开头的行

grep -E "^(s|S)"
egrep "^(s|S)"  

注意!!!
egrep "c|Cat" /root/test.txt
匹配的是c和Cat,如果想匹配cat或Cat:
egrep "(c|C)at" /root/test.txt

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-18 23:34:08  更:2022-06-18 23:34:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:38:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码