热门推荐
正则表达式与→shell编程三剑客
2024-10-31 20:27

正则表达式概念

正则表达式与→shell编程三剑客

grep命令详解

详解linux正则表达式(基础正则表达式+扩展正则表达式

是一种通过符号和字符串进行匹配规则的,对文件内容的查询结果进行影响。

正则表达式是由普通字符和元字符构成。
1.其中普通字符包括大小写字母,数字,标点符号及一些其它符号。
2.而元字符则是指那些在正则表达式中有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

常用正则:grep、sed、awk、pgrep、mkdir、touch……
touch a{1…100}.txt

[root@localhost ~]# ifconfig ens33 | grep "inet 192.168.6.20 " | awk ‘{print $5}’
broadcast

(1)n:显示行号,查询的指定字符串在文件中所在的行号

(2)i:显示内容不区分大小写

(3)v:反向查询,显示不包含指定字符串的行

(3)[ ] :匹配[ ]中任意字符,or的意思

(4)^ :以指定的字符或字符串开头

(5)$ :放在字符串前面,表示调用变量,字符串为变量名。放在字符串后面,表示以该字符串结尾。

特殊用法: $ abc {$ 表示调用变量}

注意:如果结尾为.则需要加转义符。因为.在 正则表达式中也是一个元字符,所以需要用转义符将具有特殊意义的字符转化成普通字符。

(6)^$ :显示空行

(7
[起始数字-结束数字] : 在指定的数字范围之间 [1-10]
[起始字母-结束字母] : 在指定的字母范围之间 [a-u]
grep -n “[A-Z]” /usr/local/httpd/conf/httpd.conf
[A-Z] :连续范围的数字或字母
数字举例


(1)取反值

格式一、

格式二、

(2){ } :指定之前的字符重复出现的数量,{ } 需要加转义符 还有:. * ( ) $ /
指定字符{数字1,数字2} : 表示字符串中,指定字符连续出现的数量范围 “wo{2,5}rk”
指定字符{数字1} : 表示字符串中,指定字符连续出现的数量范围 “wo{2}rk”

(3)正则中的通配符

grep ‘r…o’ /etc/passwd
查询r和o中间有2个字符的,空格算一个字符

grep -n ‘ooo*’ /etc/passwd.old
查询两个o以上的字符串

在查询“oo o*”中,必须以oo成对出现的,而在查询“ooo o*”,必须以ooo成对出现
如果是“o o*”,则第一个o必须存在,第二个o是零个或者多个,所以包含o、oo、ooo、oooo、……
若查询“oo o*”,查询两个o以上的字符串。搜索关键字是两a。包含oo、ooo、oooo、……
若查询“ooo o*”,查询三个o以上的字符串。包含ooo、oooo、……

grep -n ‘.*’ /etc/passwd.old
所有都出现

在shell中,增加了一些更简化的正则表达式元字符,只有一小部分命令支持扩展正则表达式。
使用命令
grep命令仅支持基础正则表达式。如果使用扩展正则表达式,需要使用egrep或awk命令

1)egrep -n ‘woo+d’ test.txt            #“wo{2,}rk"可以写成"wo+rk”

2)egrep -n ‘o?oo’ test.txt #代表查询指定文件中包含oo,且第一个o可要可不要的字符串

3)egrep -n ‘o?’ test.txt

4)egrep -n ‘oo?’ test.txt

5)egrep -n ‘ooo?’ test.txt

6)egrep -n ‘name|Name’ /usr/local/httpd/conf/httpd.conf

7)egrep -n ‘t(a|e)st’ /usr/local/httpd/conf/httpd.conf (只能对某一字符进行限制

8)egrep -n ‘A(xyz)+C’ /usr/local/httpd/conf/httpd.conf

以上后三个必须加引号,而之前的可加可不加

shell编程三剑客: GREP   SED   AWK
sed命令教学
awk命令教学

【1】sed是一种在线编辑器,它一次处理一行内容。

Sed主要作用
用来自动编辑一个或多个文件
简化对文件的反复操作
编写转换程序等。
【默认情况下,所有的sed命令都是在模式空间内执行的(也就是不修改源文件!因此输入的文件并不会发生任何变化,除非是用重定向存储输出 】

用法
两种格式
sed [选项] ‘操作’ 参数
sed [选项] -f scriptfile 参数
[选项]
常见的sed命令选项主要包含以下几种
-n、–quiet或silent:仅显示处理后的结果
-i:编辑文本内容
-e或-expression=:用指定命令或者脚本来处理输入的文本文件
-f或-file=:用指定的脚本文件来处理输入的文本文件
-h或–help:显示帮助

‘操作’
“操作”用于指定对文件操作的动作行为,也就是sed命令。通常情况下是采用“[n1[,n2]]”操作参数的格式。n1、n2是可选的,不一定会存在,代表选择进行操作的参数。
:操作需要在5~20行之间进行,则表示为“5,20动作行为”。
常见的操作包括以下几种
a: 增加,在当前行下面增加一行指定内容。
c: 替换,将选定行替换为指定内容
d: 删除,删除选定的行
i : 插入,在选定行上面插入一行指定内容
p: 打印, 如果同时指定行,表示打印指定行。如果不指定行,则表示打印所有内容。如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。
s : 替换,替换指定字符
y: 字符转换

参数是指操作的目标文件。当存在多个操作对象时,文件之间用逗号“,”分隔
而scriptfile表示脚本文件,需要用选项“-f”指定。当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。

sed -i ‘1a#chkconfig:35 25 25’ /usr/local/httpd/conf/httpd.conf         注意,不能给空文件添加数据。

cp /usr/local/httpd/conf/httpd.conf /usr/local/httpd/conf/httpd.txt
head -16 /usr/local/httpd/conf/httpd.txt

删除指定范围的行
sed -i “360,364d” /usr/local/httpd/conf/httpd.txt
sed -i “355, +10d” /usr/local/httpd/conf/httpd.txt

vim a.txt
server
SERVER
Server
aaabaaaa
dddkdda
sed -i ‘s/server/SERVER1/’ a.txt
将每行的第一个字符串进行修改

sed -i ‘s/server/SERVER1/3’ a.txt
后面的数字3代表将每行的【第几个同名字符串】进行修改

sed -i ‘/server/c #haha’ /a.txt
替换指定字符串所在的行

只替换指定的字符串,不会替换整行。
sed -i ‘s/server/SERVER/g’ /a.txt         后面的g表示对全文进行修改

【2】awk:功能强大的编辑工具。逐行读取输入文本,并根据指定的匹配模式进行查找(一般多用于显示指定的字段

Sed的工作流程

【1】分割符,默认为空格分割符。将文件的每一行的第一个字段分割出来
awk -F: ‘{print $1}’ /etc/passwd

awk ‘{print}’ /a.txt = cat /a.txt
awk ‘{print $0}’ /a.txt = cat /a.txt         awk使用$0表示整个行(记录

【2】输出第一到第三行内容

【3】输出第一和第三行内容

【4】
awk ‘(NR%2)==0{print}’ /a.txt
输出所有偶数行内容

awk ‘(NR%2)==1{print}’ /a.txt
输出所有奇数行内容

awk ‘/^root/{print}’ /etc/passwd
输出以root开头的行

awk ‘/nologin$/{print}’ /etc/passwd
输出以nologin结尾的行

awk ‘BEGIN{X=0};//bin/bash$/{x++};END{print x}’ /etc/passwd
统计以bin/bash结尾的行数

    以上就是本篇文章【正则表达式与→shell编程三剑客】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/quote/1665.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多