正则表达式 文本三剑客

news2025/1/13 14:50:30

一 正则表达式:

由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等

一 元字符点(.)

① [root@localhost ~]#ls /etc/|grep rc[.0-6]

 ② [root@localhost ~]#ls /etc/ | grep 'rc\.'

③ [root@localhost ~]# grep r..t /etc/passwd   

④ [root@localhost ~]# echo abc |grep a.c  

⑤ [root@localhost ~]# echo abc |grep 'a\.c'   

      #标准格式需要加'' 或者 " "

⑥ [root@localhost ~]# ls |grep '[zhou].txt'  

 

⑦ [root@localhost ~]# ls [a-d].txt                
    #通配符
a.txt  A.txt  b.txt  B.txt  c.txt  C.txt  d.txt 

⑧ [root@localhost ~]# ls |grep '[^a-z].txt' 

⑨ [root@localhost ~]# ls |grep '[^a.z].txt'     
    #[]里就是本意不需要转义

⑩ [root@localhost ky15]#grep [[:space:]] zhen.txt 


 11 [root@localhost ky15]#grep [[:space:]] zhen.txt |cat -A

12 [root@localhost ~]#ls /etc/ |grep "rc[.0-6]"    rc.   rc0  rc1   rc2  rc3     rc6
     [root@localhost ~]#ls /etc/ |grep "rc[.0-6]." 

②[ ]:在正则表达式中[ ]表示匹配[ ]中任意一个字符


[root@pc1 data]#touch {a..c}.txt #创建a-c.txt文件夹
[root@pc1 data]#ls               #显示文件夹内容
a.txt  b.txt  c.txt 
[root@pc1 data]#ls |grep '[a-z].txt' #使用grep过滤ls中有任意一个a-z字母.txt的文件
a.txt
b.txt
c.txt

③[^]:在正则表达式中表示匹配[ ]中外的任意单个字符 


[root@pc1 data]#touch {a..b}.txt        #创建a-b.txt文件
[root@pc1 data]#touch {0..2}.txt        #创建0-2.txt文件
[root@pc1 data]#ls                      #显示文件
0.txt  1.txt   a.txt  b.txt  
[root@pc1 data]#ls |grep '[^0-9].txt'   #过滤ls显示文件中除去0-9任意字符.txt文件
a.txt
b.txt
c.txt
[root@pc1 data]#ls |grep '[^a-z].txt'   #过滤ls显示文件中除去a-z任意字符.txt文件
0.txt
1.txt
2.txt

[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:]    不可打印的控制字符(退格、删除、警铃...)
[:digit:]    十进制数字
[:xdigit:]  十六进制数字
[:graph:]  可打印的非空白字符
[:print:]   可打印字符
[:punct:] 标点符号


[root@pc1 data]#echo AB12ab | grep -o '[[:alpha:]]'  #过滤输出内容的字母
A
B
a
b
[root@pc1 data]#echo AB12ab | grep -o '[[:alnum:]]'  #过滤输出内容的字母和数字
A
B
1
2
a
b
[root@pc1 data]#echo AB12ab | grep -o '[[:lower:]]'  #过滤输出内容的小写字母
a
b
[root@pc1 data]#echo AB12ab | grep -o '[[:upper:]]'  #过滤输出内容的大写字母
A

2 表示次数

① *  :表示匹配前面字符任意次,包括0次


[root@pc1 ~]#echo  ac |grep 'ab*c'  #ab之间不输入b可匹配
ac
[root@pc1 ~]#echo  abc |grep 'ab*c' #ab之间输入1个b可匹配
abc
[root@pc1 ~]#echo  abbc |grep 'ab*c'#ab之间输入2个b可匹配
abbc

②  .*  :表示匹配前面字符任意次,包括0次


[root@pc1 ~]#echo ac |grep 'ab.*c'  #ac之间不输入b匹配不到
[root@pc1 ~]#echo abc |grep 'ab.*c' #ac之间输入1个b可以匹配
abc
[root@pc1 ~]#echo abbc |grep 'ab.*c' #ac直接输入2个b可以匹配
abbc

③  \?  :表示匹配前面字符1次或0次,可有可无


[root@pc1 ~]#echo ac | grep 'ab\?c'    #ac之间不输入b可以匹配
ac
[root@pc1 ~]#echo abc | grep 'ab\?c'   #ac之间输入1个b可以匹配
abc
[root@pc1 ~]#echo abbc | grep 'ab\?c'  #ac之间输入2个b匹配不到 

④ \+ :表示匹配前面字符最少1次。


[root@pc1 ~]#echo ac | grep 'ab\+c'  #ac之间不输入b匹配不到
[root@pc1 ~]#echo abc | grep 'ab\+c' #ac之间输入1个b可以匹配
abc
[root@pc1 ~]#echo abbbbc | grep 'ab\+c' #ac之间输入多个b可以匹配
abbbbc

⑤  \{n\}  :表示匹配前面的字符n次

[root@pc1 ~]#echo abbbc |grep 'ab\{3\}c'  #输出abbbc匹配ac之间b字符出现3次可以匹配
abbbc
[root@pc1 ~]#echo abbbbc |grep 'ab\{3\}c' #输出abbbbc匹配ac之间b字符出现3次匹配不到

⑥  \{m,n\}  :表示匹配前面字符最少m次最多n次


[root@pc1 ~]#echo abc |grep 'ab\{1,3\}c'  #输出abc匹配ac之间b出现最少1次最多3次可以匹配
abc
[root@pc1 ~]#echo abbc |grep 'ab\{1,3\}c' #输出abbc匹配ac之间b出现最少1次最多3次可以匹配
abbc
[root@pc1 ~]#echo abbbc |grep 'ab\{1,3\}c'#输出abbbc匹配ac之间b出现最少1次最多3次可以匹配
abbbc
[root@pc1 ~]#echo abbbbc |grep 'ab\{1,3\}c'#输出abbbbc匹配ac之间b出现最少1次最多3次匹配不到

⑦\{m,\}:

⑧\{,n\}:

3 位置锚定

①  ^  表示以什么字符开头的行。

②  $  表示以什么字符为结尾的行。

③ ^PATTERN$ 表示用于模式匹配整行 (单独一行  只有PATTERN字符)。

④  ^$ 表示空行。

⑤  \< 或 \b        #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)。

⑥  \> 或 \b       #词尾锚定,用于单词模式的右侧。

⑦  \<PATTERN\>    #匹配整个单词。

举例 

[root@pc1 ~]#cat a.txt                #查看a.txt内容 
root
abc   abd  abf abe 
asfase
asdfasfewe
[root@pc1 ~]#cat a.txt |grep '^a'     #查看a.txt内容过滤以a开头的行
abc   abd  abf abe 
asfase
asdfasfewe
[root@pc1 ~]#cat a.txt |grep 'e$'     #查看a.txt内容过滤以e为结尾的行
asfase
asdfasfewe
[root@pc1 ~]#cat a.txt |grep '^root$' #查看a.txt内容过滤只有root字符的行
root
[root@pc1 ~]#cat a.txt |grep '\ba'    #查看a.txt过滤以a开头的词
abc   abd  abf abe 
asfase
asdfasfewe
[root@pc1 ~]#cat a.txt |grep 'e\b'    #查看a.txt过滤以e为结尾的词
abc   abd  abf abe 
asfase
asdfasfewe
[root@pc1 ~]#cat a.txt |grep -o '\babc\b' #查看a.txt过滤次abc
abc

分组

()将多个字符捆绑在一起当做一个整体处理


[root@pc1 ~]#echo abcccc |grep "abc\{4\}"  #匹配输出内容c出现4次
abcccc
[root@pc1 ~]#echo abcccc |grep "\(abc\)\{4\}" #abc字符加()分组匹配输出内容abc出现4次,无abc出现4次匹配不到
[root@pc1 ~]#echo abcabcabcabc |grep "\(abc\)\{4\}"  #abc字符加()分组匹配输出内容abc出现4次匹配成功
abcabcabcabc

 文本三剑客之 grep

grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

 color  对匹配文件着色显示

案例 

二 扩展正则表达式

述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在Linux中也就是代表我们定义的模式模板,Linux工具可以用它来过滤文本
①使用方法

grep  -E选项加正则表达式内容,与正常正则表达式区别在于不用在匹配时添加 \ 

②表示次数

*   匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次
{,n}  #匹配前面的字符至多n次,<=n,n可以为0
{n,} #匹配前面的字符至少n次,<=n,n可以为0

③表示分组

() 分组

三 文本三剑客之awk

工作原理:

前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。


awk为流编辑器,即读取文件一行处理一行。不同于vi编辑器等是将文件整个缓存在内容中处理。

类似于excel表格,awk更是一门编辑语言,支持条件判断、数组循环等功能,适合小型的文本数据

格式:
awk  [选项]   '处理模式{处理动作}'             '{ }'    为固定格式


举例:取出sda硬盘的容量
[root@pc1 data]#lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    2G  0 part /boot
└─sda2            8:2    0   54G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-swap 253:1    0    4G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  
[root@pc1 data]#lsblk  |grep -w sda       #通过过滤sda字符将sda此行过滤出
sda               8:0    0   60G  0 disk 
[root@pc1 data]#lsblk  |grep -w sda | awk '{print $4}' #使用awk不指定分隔符 打印出第4列
60G

2 处理动作:主要以 print

①基本格式:awk  [选项]   '处理模式{处理动作}'

②print动作:打印,打印'{print $1}'即为打印第一列,'{print $n}'即打印为第n列,'{print $n,$m}'即为打印第n列和第m列。

③print打印顺序:'BEGIN{print "1"} END {print  "2"}  {print "3"} ',首先打印BEGIN后的print 1,然后打印print 3  最后打印END后的print 2,BEGIN表示第一个打印,END表示最后打印


 
举例2:
[root@pc1 data]#  awk 'BEGIN{print "1"} END{print "$2"} {print "3"}' test.txt
1
3
2

[root@pc1 data]#awk '{print $1,$5}' mcb.txt  #使用awk处理文件mcb.txt打印第1列和第5列

 [root@pc1 data]#awk  '{print $5}' mcb.txt           #使用awk处理文件mcb.txt打印第5

 [root@pc1 data]#awk '{print $1}' mcb.txt     #使用awk处理文件mcb.txt打印第1

3 选项

①基本格式:awk  [选项]   '处理模式{处理动作}'

②选项若不写默认为以空格为分隔符处理,且会将空格自动压缩。

③-F 选项 指定分隔符,即指定以什么为分隔符处理内容

举例:
[root@pc1 data]#cat test.txt         #编辑test.txt内容
one    two   three
root:lisi:zhangsan



[root@pc1 data]#awk '{print $2}' test.txt  #默认过滤test内容以空格为分隔符打印出第2列为two
two
[root@pc1 data]#awk -F : '{print $2}' test.txt #使用-F选项指定以:为分隔符打印出第2列为lisi
 
lisi

 ​​​​​​​

 [root@localhost ~]#awk -F: 'BEGIN{print "hello" $1}{print $1}' /etc/passwd | head

4 处理模式

①基本格式:awk  [选项]   '处理模式{处理动作}'

②处理模式为空表示无其他额外条件。

③正则表达式匹配模式

正则匹配:与正则表达式配合使用。

举例:
[root@pc1 data]#cat test.txt      #创建test.txt
root 1   abc  2    3     4      5      6  7 8
abcd
 
sadfasdf root
[root@pc1 data]#awk   '/^root/{print $2}' test.txt #使用awk配合正则表达式打印出test.txt文件中以root为开头的行的第二列,注意处理模式在固定格式'{}'的单引号中 
1                                 #匹配出的内容
[root@pc1 data]#awk   '/^root/,/root$/{print $2}' test.txt  #使用awk配合正则表达式打印出test.txt文件中以root为开头的且以root结尾的第二列,注意处理模式在固定格式'{}'的单引号中
1
 
 
root                               #匹配出的内容

5 awk常见的内置变量 

比较操作符:==, !=, >, >=, <, <=

逻辑操作符:&&与 并且的关系,||或 或者关系,!非 取反关系

①FS :指定每行文本的字段分隔符,缺省为空格或制表符(tab)。与 “-F”作用相同 -v "FS=:"

两者意义一样

#awk -v  FS=' : '   '{print   $1 }'    /etc/passwd

 #awk -v FS=':' '{print $1FS$3}' /etc/passwd

 [root@localhost ~]#awk -v FS=$fs '{print $1FS$3}' /etc/passwd | head


 


[root@pc1 data]#cat a.txt 
a:b:c
[root@pc1 data]#awk -v "FS=:" '{print $2}' a.txt  使用FS变量指定:为分隔符打印a.txt文件的第二列
b

②OFS:输出时的分隔符

[root@pc1 data]#cat a.txt 
a:b:c
[root@pc1 data]#awk -v "FS=:"  -v OFS="==" '{print $1OFS$3}' a.txt  使用FS变量指定:为分隔符且指定输出分隔符OFS为==,打印a.txt文件的第1列和第3列
a==b

[root@localhost ~]#awk -v FS=':' -v OFS='==' '{print $1,$3}' /etc/passwd | head 

 

③NF:当前处理的行的字段个数即处理行有多少列,默认按空格分列,可指定。 

举例
awk -F : '{print NF}'  /etc/passwd  |head -n 1
#指定:为分隔符打印出文件/etc/passwd第一行有多少个字段,即多少列
7
awk -F : '{print $(NF-1)}'  /etc/passwd |head -n 1 
#指定:为分隔符打印出文件/etc/passwd第一行的倒数第二个字段,即倒数第二列
/root

 ④NR:当前处理的行的行号(序数)

举例
awk -F :   'NR==1{print $1}'  /etc/passwd
#指定:为分隔符打印出/etc/passwd文件第一行的第一个变量,注意模式要写在'模式{}'位置
root                       
awk -F :   'NR>=1 && NR<=3{PRINT $1}' /etc/passwd
#指定:为分隔符打印出/etc/passwd文件大于等于第一行且小于等于第三行的第三个变量
root
bin
daemon

 ⑤$0:当前处理的行的整行内容


#awk -F : 'NR==1{print $0}' /etc/passwd


#指定:为分隔符打印出文件/etc/passwd第一行的所有内容
root:x:0:0:root:/root:/bin/bash
awk -F : 'NR>=1 && NR<=3{print $0}' /etc/passwd
#指定:为分隔符打印出文件/etc/passwd大于等于第一行且小于等于第三行的所有内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
 

⑥$n:当前处理行的第n个字段(第n列)

⑦FILENAME:被处理的文件名

⑧RS:行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

#echo $PATH | awk -v RS=':' '{print $0}'
 

 

打印磁盘已经使用情况

#cat /etc/passwd|awk -F: '{print $1,$3}'         #指定冒号作为分隔符,打印第一列和第三列 

cat /etc/passwd|awk -F: '{print $1":"$3}'        #用冒号分隔开 

 # cat /etc/passwd|awk -F: '{print $1"\t"$3}'

以下三条意义一样 

[root@localhost ~]#df|awk -F"( +|%)" '{print $5}'


[root@localhost ky15]#df |awk -F"[[:space:]]+|%" '{print $5}'


[root@localhost ky15]#df |awk -F"[ %]+" '{print $5}' 

 疑问

[root@localhost ~]#ifconfig ens33|sed -n '2p' |awk '{print $2}'

[root@localhost ky15]#hostname -I|awk {print $1}
192.168.91.100 192.168.122.1 

awk数组特性:

  • awk的数组是关联数组(即key/value方式的hash数据结构),索引下标可为数值(甚至是负数、小数等),也可为字符串 1. 在内部,awk数组的索引全都是字符串,即使是数值索引在使用时内部也会转换成字符串 2. awk的数组元素的顺序和元素插入时的顺序很可能是不相同的

  • awk数组支持数组的数组

①提前十行访问量

  #ss -nta|awk 'NR!=1{state[$1]++}END{for(i in state){print i,state[i]}}'

打印IP 子网掩码 网关 

  [root@localhost ~]#ifconfig ens33 | awk '{print}'

[root@localhost ~]#ifconfig ens33 | awk '/netmask/{print}'
 [root@localhost ~]#awk '{print $1,$3}'     打印第一列和第三列

[root@localhost ~]#awk -F: 'BEGIN{print "hello" $1}{print $1}' /etc/passwd | head

 [root@localhost ~]#awk -F: 'END{print "hello" $1}{print $1}' /etc/passwd | tail

计算:

[root@localhost ~]#awk 'BEGIN{print 100+200}' 

#分区利用率  

[root@localhost ky15]#df|awk '{print $5}'

[root@localhost ~]#df|awk '{print $5}' | tail -n 2
[root@localhost ~]#df|awk '{print $5}' | tail -n 2 | tr -d %
[root@localhost ~]#df|awk -F"[ %]+" '{print $5}' | tail -n 2 
 

 

 

 

面试题

 四文本三剑客之sed

1 定义
  • sed编辑器是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来辑数据流。

  • sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要存储在一个命令文本文件中。

作用:在打不开文件的情况下,修改文件

语法:输出那些行,留下那些行

2.工作流程

读取: sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )。


执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行, 除非指定了行的地址,否则sed命令将会在所有的行上依次执行。


显示:发送修改后的内容到输出流(屏幕)。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

 3 命令选项:


-n            关闭自动打印
-e             多点编辑:[root@www data]#sed -n -e '/^r/p'  -e'/^b/p' /etc/passwd
-f              从指定文件中读取编辑脚本
-r, -E          使用扩展正则表达式
-i.bak         备份文件并原处编辑

 4 基本操作

以mcb.txt文本内容为模板验证

 打印内容

#sed  '   '               #交互模式输入一行,自动打印一行相同的

①[root@localhost ~]#sed   '  '   mcb.txt                   默认将输入内容打印出来

①打印显示mcb.txt文本

 #sed -n   '3p'   mcb.txt      #打印第三行内容

#sed -n   ' 1,3p ' mcb.txt        打印第一行到第三行

  

#sed -n '$p' /etc/passwd    #打印最后一行使用通配符
 

# sed   '3q'  mcb.txt     #打印三行后退出

[root@localhost ~]#sed -n 'n;p' mcb.txt                  输出文件内容所有偶数行

[root@localhost ~]#sed -n '3,${n;p}' mcb.txt             输出第三行至文件尾之间的偶数行 

 #sed  -n  '/the/p' mcb.txt      显示包含/the/的行

ifconfig ens33 |sed -n '2,4p'    #打印网卡信息的2至4行

 #cat -n /etc/passwd |sed -n '2,+4p'    #打印第2至6行,即第二行开始往后四行

sed -n ' '   #交互模式输入一行,关闭自动打印
 
sed -n ' p'  #加上p又恢复自动打印,与sed ' '相同

  查找文件内容 与cat功能一样


sed ' ' /etc/fstab
 
sed -n ' p' /etc/fatab

 过滤关键字

#sed  -n  '/man/p' /etc/passwd      #从第二行开始,找到man 为止

 匹配关键字 

#sed -n '2,/man/p' /etc/passwd    从第#行开始匹配    #从第二行开始,找到man为止

nl  打印文件的行数

#ifconfig ens33|sed -n '2p' |awk '{print $2}'  查看虚拟机IP地址 

[root@localhost ~]#ifconfig ens33 | sed -n '2p'        IP     网关     子网掩码
 

 奇偶行

seq 10 |sed -n '1~2p'
seq 10 |sed '2~2d'

#打印奇数行
 


seq 10 |sed -n '2~2p'
seq 10 |sed '1~2d'

#打印偶数行 

 删除内容

cat 1.txt |sed '3d'

#删除第三行并显示出来
注 删除指定行并不是真正删除,只是将删除了的结果显示出来,并不是真正删除了

sed '2,4d' seq.txt 

#删除连续的2到4行

sed '/^$/d' /opt/seq.txt   #删除文本中的空行

sed '/nologin$/!d' /etc/passwd

#删除不是以nologin结尾的行

sed '/nologin$/!d' /etc/passwd

#删除不是以nologin结尾的行

 备份再删除

sed -i.bak '3d' 1.txt

#原文件删除第三行,并原文备份

 插入内容

sed -i '2a charu' 1.txt

#在第二行后插入内容
sed -i '2a\\n charu2' 1.txt

#插入空行,多添加一个\

替换行内容 

sed -i '2ctihuan' 1.txt

#将第二行的内容替换成tihuan

取反 

seq 10|sed -n '2!p'

#不显示第二行

搜索替代

 ①查几点到几点之间的日志

sed -n '/2023:08:09/,/2023:09:42:37/p' access_log

②修改全局,后加g

sed -i 's/root/admin/g' /etc/passwd
 
#将全局出现的root修改为admin

③修改多行,使用r及e

④修改selinux开机不启动配置文件

举例:
seq 5 |sed       #生成1-5数字传给sed
#该格式报错,基本格式中的'{自身脚本语法}'不可以不写,可以写空则是默认打印全部内容如下
seq 5 | sed ''
1
2
3
4
5
2、sed脚本语法及命令
①sed脚本语法:地址+sed自己脚本命令,地址即范围例如全文或第一行,第一行至第三行等范围

②sed脚本命令:

p 将内容打印到屏幕,使用时关闭自动打印功能,-n选项

 打印内容

 q 到指定的内容即退出,例如打印到第三行直接退出

 IP 内容忽略大小写,使用时关闭自动打印功能,-n选项

 删除 插入  

 d 删除指定内容

a 在指定位置添加内容

c 替换指定内容

 ~ 步进,0~2,2个间隔,1~2,1个间隔 seq 10 |sed -n '0~2p'每间隔2个打印一次

 sed选项


① -n 选项,sed默认有自动打印功能,-n选项是关闭打印功能,一般配合脚本命令p使用

②-r  选项,开启扩展正则表达式

③-i  选项,在文件中添加内容,可以在-i是加.bak后缀备份修改的文件。例如 sed -i.bak  a.txt会在同目录下生成一个a.txt.bak文件

查找 替换

格式:sed '/可使用正则表达式选择范围/'s/查找内容/替换内容/g g表示全文,固定格式的///可以用###等符号替换

注意:查找内容可使用正则表达式,替换内容不可使用正则表达式

举例1:

搜索/etc/passwd 中包含root字符的行
sed -nr '/root/p'   /etc/passwd  #-n关闭自动打印,-r启用扩展正则表达式查询root字符并打印
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin   #查询结果


举例2:

使用sed关闭selinux
cat /etc/selinux/config   #查看selinux配置文件内容
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 
sed -i.bak 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
#-i选项备份selinux配置文件后缀加.bak,在config文件中找到SELINUX=enforcing修改为SELINUX=disabled,g表示所有搜索到的内容都替换。单引号中''s之前可加行号
后向引用

( )内的按顺序标为123 ,引用时\1调用第一个()的内容,\n表示调用第n个()的内容。

.*表示任意长度字符不管是什么字符

举例1:取ip地址


ifconfig ens33 |sed -nr 's/.*inet (.*) netmask.*/\1/p'
#查看ens33的网卡信息传给sed处理,-n选项关闭自动打印,-r选项开启扩展正则表达式
's///'查找替换标准格式,.*inet 表示以inet为止的前面所有字符 (.*) 括号表示使用反向引用
.*表示该处的任意字符 netmask.*表示以netmask开头后面的所有字符。\1表示反向引用第一个()的
内容,p表示打印出来
192.168.30.11  #打印结果


举例2:


echo abc123XYZ | sed -nr 's/(abc)(123)(XYZ)/\3\2\1/p'
#打印abc123XYZ传给sed处理变成XYZ123ABC,-n选项关闭自动打印,-r选项开启扩展正则表达式
's///'查找替换标准格式。三个()括起来的内容分别表示元素123,调用时改变调用顺序打印即可改变内容顺序
XYZ123abc       #打印结果
变量

使用sed查询是可以直接调用变量,注意必须用“ ”号或者俩个双引号,单引号不识别变量

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

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

相关文章

openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错

文章目录 openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错210.1 谓词下推引起的查询报错210.1.1 问题现象210.1.2 原因分析210.1.3 处理办法 openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错 210.…

这些好用小众的知识库软件,快收藏起来

现代企业和团队日益重视知识管理&#xff0c;寻找能提供精准、高效、简便的知识库应用变得尤其重要。而今天&#xff0c;将带给大家三款小众却倍受好评的知识库软件&#xff0c;如果你是寻找有效的信息管理工具的话&#xff0c;那么以下就是你不能错过的秘密武器了&#xff0c;…

由于系统注册表文件丢失或损坏,因此Windows无法加载,如何解决?

问题描述&#xff1a;windows黑屏未能启动&#xff0c;提示由于系统注册表文件丢失或损坏&#xff0c;因此windows无法加载&#xff0c;错误代码&#xff1a;0xc000014c。出现这种问题的原因大多是因为电脑在使用过程中硬件松动&#xff0c;导致出现这种问题。 解决办法: 1. 如…

尝试搭建域

使用window 7 作为dmz 主机 server_2008 作为 预控 前提两台主机都在同一个LAN 下&#xff08;设置一个LAN 区域&#xff09;&#xff0c;同样防火墙关闭状态 首先搞定server 2008 中的域 1. 在计算机属性中选择更改设置中将主机名修改一下&#xff1a; 2. 在server 2008 中…

Java 面向对象进阶 01(黑马)

static案例代码&#xff1a; 代码&#xff1a; public class Student {private String gender;private String name;private int age;public static String teacherName ;public Student() {}public Student(String gender, String name, int age) {this.gender gender;this.…

四、ES集群安全策略设置 X-pack

本文主要是结合ES集群搭建时使用&#xff0c;并且适用于ES7.x以上版本 背景及安全策略方案对比 ES 7.x以下版本默认几乎没有任何安全策略&#xff0c;如果集群IP、端口被暴露&#xff0c;在可访问的情况下任何用户都可以对索引进行管理以及数据的增删改查等&#xff0c;基于此需…

故障脚本的重要作用:预防、诊断与恢复

故障脚本是在信息技术和计算机领域中广泛使用的一种自动化工具&#xff0c;它们的主要目的是预测、诊断和修复系统或软件中的故障。这些脚本在现代技术环境中扮演着至关重要的角色&#xff0c;本文将介绍故障脚本的主要作用。 一、预防性作用 监控和预警 故障脚本可以用于监控系…

互联网加竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

idea创建golang项目

目录 1、设置环境 2、创建项目 3、设置项目配置 4、初始化项目 5、安装本项目的外部依赖包 6、运行项目 7、访问页面查看结果 1、设置环境 1 启用 Go Modules 功能go env -w GO111MODULEon 2. 阿里云go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct上述命…

string的基本概念及常用接口

string的基本概念 本质&#xff1a; string时C风格的字符串&#xff0c;而string本质上是一个类。 string和char*的区别&#xff1a; char*是一个字符指针。而string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char*型的容器。 特…

通过docker构建基于LNMP的WordPress项目

计划通过自定义网络模式&#xff0c;创建一个172.18.0.0/16网段 nginx&#xff1a;172.18.0.2:80 php&#xff1a;172.18.0.3:9000 mysql&#xff1a;172.18.0.4:3306 创建nginx的镜像 准备好nginx的安装包 准备nginx的网页目录和wordpress网站目录以及nginx.conf文件 编…

Mybatis-Plus基础

typora-copy-images-to: img Mybatis Plus 今日目标&#xff1a; 了解mybatisplus的特点能够掌握mybatisplus快速入门能够掌握mybatisplus常用注解能够掌握mybatisplus常用的增删改查能够掌握mybatisplus自动代码生成 1 MybatisPlus简介 1.1 MybatisPlus概述 ​ MyBatis-…

【开源】基于JAVA语言的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

Microsoft Edge 浏览器报错 提示不安全

网站提示不安全 是因为 Microsoft Edge 开了安全过滤 我们需要把这个关掉 打开浏览器的设置&#xff0c;然后 找到隐私选项 找到下边的Microsoft Defender Smartscreen 关掉 Microsoft Edge 支持 Microsoft Defender SmartScreen | Microsoft Learn win10系统下打开网页提示…

云服务器如何快速部署访问静态页面(个人网站博客等)

1&#xff0c;购买云服务器 2&#xff0c;配置安全项 云服务器ecs下&#xff0c;配置ip、端口所有人都可访问 3&#xff0c;关闭防火墙&#xff0c;将前端静态项目传输到云服务器上 可以使用SecureCRT&#xff0c;本地远程连接到服务器&#xff08;需要用户名与密码&#x…

basic CNN

文章目录 回顾卷积神经网络卷积卷积核卷积过程卷积后图像尺寸计算公式&#xff1a;代码 padding代码 Stride代码 MaxPooling代码 一个简单的卷积神经网络用卷积神经网络来对MINIST数据集进行分类如何使用GPU代码 练习 回顾 下面这种由线形层构成的网络是全连接网络。 对于图像…

分享4种免费的平面图设计工具

从事设计行业的工人或多或少会接触到平面图。例如&#xff0c;在建造任何类型的建筑&#xff0c;如新房子、办公室和酒店&#xff0c;都需要使用平面图来确保项目的准确性。平面设计强调视觉传达。一般来说&#xff0c;设计的目的和信息是通过排版、配色、构图等技术手段传达的…

Git学习笔记(第10章):自建代码托管中心GitLab

目录 10.1 简介 10.2 安装 10.2.1 准备服务器 10.2.2 准备安装包 10.2.3 编写安装脚本 10.2.4 初始化GitLab服务 10.2.5 启动GitLab服务 10.2.6 使用浏览器访问GitLab 10.3 创建远程库 10.4 本地库推送到远程库 10.1 简介 GitLab是由GitLab Inc.开发&#xff0c;使用…

elasticsearch8.x版本docker部署说明和集成springboot

前提&#xff0c;当前部署没有涉及证书和https访问 1、环境说明,我采用三个节点&#xff0c;每个节点启动两个es&#xff0c;用端口区分 主机角色ip和端口服务器Amaster192.168.2.223:9200服务器Adata192.168.2.223:9201服务器Bdata,master192.168.2.224:9200服务器Bdata192.1…

服务和路由

Kong Gateway管理员使用对象模型来定义其期望的流量管理策略。在该模型中&#xff0c;两个重要的对象是服务&#xff08;services&#xff09;和路由&#xff08;routes&#xff09;。服务和路由被协调地配置&#xff0c;以定义请求和响应在系统中经过的路由路径。 下面的高级…