本文主要是介绍linux基础(33)--正则表达式--RHEL6.5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文主要讲解正则表达式、grep、sed、awk、cut的使用。
1. 正则表达式
正则表达式又称正则表示法、常规表示法。
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,是指用来描述或者匹配一系列符合某个句法规则的字符的字符串。
正则表达式即用某种模式去匹配一类字符串。
2. grep
参数:
-i 忽略大小写
-v 反转
-n 显示行号
--color 关键词高亮
以root开头的行:
grep "^root" /etc/passwd
以root结尾的行:
grep "root$" /etc/passwd
包含root的行,显示行号, 高亮:
grep -n "root" /etc/passwd --color
* 重复前面字符>=0次:
grep "root*" /etc/passwd --color
[list] 字符集合:
grep [a-z] /etc/passwd --color
"^"放在"[ ]"里面表示否的意思,显示不以#开头的行:
grep ^[^#] /etc/passwd #等价于 grep -v "^#" /etc/passwd
包含数字的行:
grep [0-9] /etc/passwd --color
以大写字母开头的行:
grep "^[A-Z]" /etc/passwd --color
不以大写字母开头的行:
grep "^[^A-Z]" /etc/passwd --color #等价于 grep -v "^[A-Z]" /etc/passwd --color
显示空白行及其行号:
grep -n "^$" /etc/passwd --color
"." 代表有一个字符:
以r开头t结尾的行:
grep "^r.*t$" /etc/passwd --color
精确匹配, 即不会拆分单词:
grep "\<root\>" /etc/passwd --color
3. sed
sed是一个流编辑器,与vim区别是sed不需要进行交互。
sed 编辑器逐行处理文件的内容,正在处理的内容存放在模式空间,处理完成后按照选项的规定进行输出。
sed是一种在线编辑器,一次处理一行的内容,处理时把当前处理的行存储在临时缓冲区中,成为模式空间,接着使用sed处理缓冲区中的内容,处理完成后把缓 冲区的内容发送往屏幕,接着处理下一行,不断重复,直到文件的结尾,但是文件的内容并未发生改变,想要改变后的文件可以采用重定向的方式完成。
替换: root换为AAA
sed "s/root/AAA/" /etc/passwd #默认只是替换第一次出现的字符串,全局替换使用g即可, sed "s/root/AAA/g" /etc/passwd
此处分隔符使用的是"/", 当"/"不方便时可以使用其他合适的分隔符进行替代。
root两侧加上括号:
sed "s/root/(&)/" /etc/passwd
注释掉所有以字母开头的行:
sed "s/^[a-z]/#&/g" /etc/passwd
多条件 -e:
sed -e "3,5s/root/AAA/" -e 9,11s/root/AAA/" /etc/passwd > a.txt #从指定行范围内匹配,并将结果重定向到a.txt
显示文件地行:
sed -n "3p" /etc/passwd
显示前三行:
sed -n "1,3p" /etc/passwd
显示全文内容,除了第三行:
sed -n "1,3!p" /etc/passwd
显示文件第三行和之后的三行:
sed -n "3, +3p" /etc/passwd
文件头插入###:
sed "1i###" /etc/passwd > a.txt
文件尾插入@@@:
sed "$a@@@" /etc/passwd > a.txt
在第2行后插入两行内容:
sed "2a hello\
world" /etc/passwd
文件第3行换成$$$:
sed "3c$$$" /etc/passwd > a.txt
-i 选项可以直接修改文件的内容:
sed -i "s/root/AAA" /etc/passwd
H 复制, G粘贴,把文件的3-5行复制到文件的末尾:
sed "2,4H;$G" /etc/passwd > a.txt
d 删除行, 删除空行:
sed "/^$/d" /etc/passwd > a.txt
w 写入到新的文件,把包含root的行写入到文件a.txt中:
sed "/root/w a.txt" /etc/passwd
4. awk
awk 是一个优秀的文本处理工具,是一个遇强则强的工具。
简单说awk是一种用户文件处理的编程语言。
任何awk语句都是由模式和动作组成,一个awk脚本可以有很多的语句,模式决定动作语句的触发条件和触发时间。
特殊字段:
BEGIN语句设置计数和头部信息,在任何动作之前进行。
END语句输出统计结果,在完成动作之后执行。
分隔符默认是空格,可以使用-F自行指定。
获取网卡eth0的ip地址:
ifconfig | grep "\<inet\>" | awk "NR==1" | awk '{print $2}' | awk -F: '{print $2}'
获取UID大于500的用户的用户名和用户登录shell:
cat /etc/passwd | awk -F: '$3>500 {print $1 "\t" $7}'
获取UID大于500且登录shel为/bin/bash的用户名:
cat /etc/passwd | awk -F: '$3>500 && $7=="/bin/bash" {print $1}'
BEGIN先于一切动作之前执行:
cat /etc/passwd | awk -F: END{print "username"} $3 > 500 && $7 == "/bin/bash" {print $1} '
END在一切动作之后执行:
cat /etc/passwd | awk -F: 'BEGIN{size=10;} $3 > 500 END{print "size is" size / 10}'
5. cut
cut是一个选取命令,即将一段数据经过分析获取我们想要的部分。
-b 字节为单位进行分割
-c 字符为单位进行分割
-d 自定义分隔符,默认为制表符
-f 与-d一起使用,指定显示哪个区域
以字节为单位分割,显示第3个字节包含数字9-12的行:
tail -3 /etc/passwd | cut -b 3, 9-12
显示每行的第3-6个字符:
cat /etc/passwd | cut -b 3-6
cut只能处理以一个空格分割的文本,多个空格间隔则无法处理。
现在正在做系列视频课程,课程中会提供视频中涉及的操作文档、软件包,系列课程内容更加完整、贴近实际工作。欢迎感兴趣的小伙伴到[网易云课堂](https://study.163.com/course/introduction/1005734052.htm)进行学习。
这篇关于linux基础(33)--正则表达式--RHEL6.5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!