linux学习笔记20-linux的正则
2018-01-11 23:41
204 查看
linux的正则一、grep/egrep 用于搜索搜索文本,并把匹配的行打印出来,egrep相当于grep的升级版
(1)grep -c 'mysql' 1.txt 打印1.txt中出现mysql的行数
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/a784bb7f5e4b3b2e52473dbd232bc317)
(2)grep -n --color 'root' 1.txt打印1.txt中出现root的行,同时打印对应行数,--color颜色显示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/6753a6cebc444b68de2fd258a466637b)
(3)grep -o 'root' 1.txt 打印1.txt中出现root的次数
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/fad87bd4430215d9aa8dc0743a8ddd9f)
(4)grep -v 'root' 1.txt -v取反,列出不包含root的行;(5)grep -A2 -n 'root' 1.txt -A2,表示同时把后两行打印出来
-B2,表示同时把前两行打印出来
-C2,表示同时把上下两行打印出来
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/1b3ce0f8864bc666fa29d187b2dd8ef3)
(6)grep -r 'root' /etc/-r搜索目录所有包含root的文件;(7)举例
列出包含数字的行 grep -n '[0-9]' 1.txt去除以#开头的行 $表示结尾,^表示开头 grep -vn '^#' 1.txt去除所有空行和#开头的行 grep -v '^$' 1.txt|grep -v '^#'过滤出以英文字母开头的行 grep -n '^[a-zA-Z]' 1.txt过滤出以非数字开头的行 ,中括号中的^表示非; grep -n '^[^0-9]' 1.txt (8)正则中常见符号
* 表示任意个*前面的字符,如o*,表示零或者多个o,(oo)*表示0或者多个oo;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/5c4ba8eae33f31c54a7c61233a9c1ca1)
. 表示任意单个字符
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/cd126b4fe76a5d538c07416ee6496b52)
?需要和-E参数一起使用,表示?前0或者1个字符,如o?表示0或者1个o;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/325946d7525f18602669f6a2ab947535)
+ 需要和-E参数一起使用,表示+前1或者多个字符,如o+表示1个或者多个o;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/7f4f809820b9f8f542034bee53cdb359)
.* 表示任意字符;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/4d113934497ef7b9d17bdf492abdbd72)
(9)或egrep 'root|mysql' 1.txt
grep -E 'root|mysql' 1.txt(10)grep -E '(OO){1,2}' 1.txt {}可以定义前面字符出现的次数二、sed 文本的查找、替换
(1)sed '1p' -n 1.txt 打印指定行(第一行),p表示print打印;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/1f8fbdb9581d11f91bb431e79e29e04d)
sed '1,5p' -n 1.txt 打印1-5行
sed '5,$p' -n 1.txt 打印5到最后一行
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/8c71f33f0c09fc402bd586a7c6a22e89)
grep -n '.*' 1.txt|sed '/root/p'-n 打印包含root的行,//来确定需要搜索的内容
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/968dd4f1f84163c604ed3fe9e84dd362)
(2)grep -n '.*' 1.txt|sed -r '/(oo)+/p' -n 同时支持+、?、.、*、()、|(或)等正则符号,不用-r参数,则需要使用脱义符号;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/82953a2cfa33aa81755b3521a6e0c8cb)
(3)sed -e可以使用多个表达式,;也有同样的功能grep -n '.*' 1.txt|sed -e '/root/p' -e '/mysql/p' -n
grep -n '.*' 1.txt|sed '/root/p;/mysql/p' -n (4)grep -n '.*' 1.txt|sed '10,$d' d表示删除指定行;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/15549a906fef0fcf97301a58b26c1be7)
(5)grep -n '.*' 1.txt|sed 's/root/toor/g' s替换,g为全局替换,否则只替换第一次的,/也可以为#、@等 ;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/828375f8eaa9a44093a95a3aadcd9d78)
(6)举例
删除所有数字 sed 's/[0-9]//g' 1.txt
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/41c31fa5c731c23ec5de893068050a48)
删除所有非数字sed 's/[^0-9]//g' 1.txt
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/20b59b7909592e511f9184652a94ce35)
直接修改文本内容 sed -i 's/ot/to/g' 1.txt调换两个字符串位置 head 1.txt|sed -r 's/([^:]+)(:.*:)([^:]+$)/\3\2\1/'三、awk
截取文档中的某段awk -F ':' '{print $1}' 1.txt -F指定分割符,print指定打印段,否则默认全部打印,$0表示整行;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/05cd5c8bf2e82a64b0a2923cb5713dd1)
也可以使用自定义字符连接每个段 awk -F ':' '{print $1"#"$2"#"$3"#"$4}' 1.txt匹配字符或字符串 awk ‘/oo/’ 1.txt针对某个段匹配 awk -F ‘:’ ‘$1~/OO/’ 1.txt
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/1c694b8d4e12a843a4a4a9adae252746)
指定输出分割符 awk -F ‘:’ ‘$1~/root/{OFS=”#”;print $1,$2}’ 1.txt
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/7fc093a2fe5083a50a07c3aa401a5f03)
多次匹配 awk -F ‘:’ ‘/root/{print $1,$3};$1~/test/;$3~/20/’ 1.txt条件操作符==,>,<,!=,>=,<=awk -F ‘:’ ‘$3=="0"’ 1.txt;
awk -F ‘:’ ‘$3>="500"’ 1.txt;
awk -F ‘:’ ‘$7!="/sbin/nologin"’ 1.txt;
awk -F ‘:’ ‘$3<$4’ 1.txt;
awk -F ‘:’ ‘$3>"5"&&$3<"7"’ 1.txt
awk -F ‘:’ ‘$3>"5"||$7=="/bin/bash"’ 1.txtawk内置变量 NF(段数) NR(行数)head -n3 1.txt|awk -F ‘:’ ‘{print NF}’
head -n3 1.txt|awk -F ‘:’ ‘{print $NF}’
head -n3 1.txt|awk -F ‘:’ ‘{print NR}’打印20行以后的行 awk ‘NR>20’ 1.txt打印段数大于3小于10的行,awk -F ‘:’ ‘NF>3&&NF<10{print}’ 1.txt
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/8b060367770dc25f562e731b60c895b9)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/3a6c695ae2d01d191ea8c6cbe665ca97)
<
915d
span style="font-family:'宋体';">计算第三段的总和 awk -F ':''{(tot=tot+$3)};END{print tot}' 1.xt;awk中也可以使用if关键词awk -F ':' '{if($1=="root")print $0}' 1.txt;
(1)grep -c 'mysql' 1.txt 打印1.txt中出现mysql的行数
(2)grep -n --color 'root' 1.txt打印1.txt中出现root的行,同时打印对应行数,--color颜色显示
(3)grep -o 'root' 1.txt 打印1.txt中出现root的次数
(4)grep -v 'root' 1.txt -v取反,列出不包含root的行;(5)grep -A2 -n 'root' 1.txt -A2,表示同时把后两行打印出来
-B2,表示同时把前两行打印出来
-C2,表示同时把上下两行打印出来
(6)grep -r 'root' /etc/-r搜索目录所有包含root的文件;(7)举例
列出包含数字的行 grep -n '[0-9]' 1.txt去除以#开头的行 $表示结尾,^表示开头 grep -vn '^#' 1.txt去除所有空行和#开头的行 grep -v '^$' 1.txt|grep -v '^#'过滤出以英文字母开头的行 grep -n '^[a-zA-Z]' 1.txt过滤出以非数字开头的行 ,中括号中的^表示非; grep -n '^[^0-9]' 1.txt (8)正则中常见符号
* 表示任意个*前面的字符,如o*,表示零或者多个o,(oo)*表示0或者多个oo;
. 表示任意单个字符
?需要和-E参数一起使用,表示?前0或者1个字符,如o?表示0或者1个o;
+ 需要和-E参数一起使用,表示+前1或者多个字符,如o+表示1个或者多个o;
.* 表示任意字符;
(9)或egrep 'root|mysql' 1.txt
grep -E 'root|mysql' 1.txt(10)grep -E '(OO){1,2}' 1.txt {}可以定义前面字符出现的次数二、sed 文本的查找、替换
(1)sed '1p' -n 1.txt 打印指定行(第一行),p表示print打印;
sed '1,5p' -n 1.txt 打印1-5行
sed '5,$p' -n 1.txt 打印5到最后一行
grep -n '.*' 1.txt|sed '/root/p'-n 打印包含root的行,//来确定需要搜索的内容
(2)grep -n '.*' 1.txt|sed -r '/(oo)+/p' -n 同时支持+、?、.、*、()、|(或)等正则符号,不用-r参数,则需要使用脱义符号;
(3)sed -e可以使用多个表达式,;也有同样的功能grep -n '.*' 1.txt|sed -e '/root/p' -e '/mysql/p' -n
grep -n '.*' 1.txt|sed '/root/p;/mysql/p' -n (4)grep -n '.*' 1.txt|sed '10,$d' d表示删除指定行;
(5)grep -n '.*' 1.txt|sed 's/root/toor/g' s替换,g为全局替换,否则只替换第一次的,/也可以为#、@等 ;
(6)举例
删除所有数字 sed 's/[0-9]//g' 1.txt
删除所有非数字sed 's/[^0-9]//g' 1.txt
直接修改文本内容 sed -i 's/ot/to/g' 1.txt调换两个字符串位置 head 1.txt|sed -r 's/([^:]+)(:.*:)([^:]+$)/\3\2\1/'三、awk
截取文档中的某段awk -F ':' '{print $1}' 1.txt -F指定分割符,print指定打印段,否则默认全部打印,$0表示整行;
也可以使用自定义字符连接每个段 awk -F ':' '{print $1"#"$2"#"$3"#"$4}' 1.txt匹配字符或字符串 awk ‘/oo/’ 1.txt针对某个段匹配 awk -F ‘:’ ‘$1~/OO/’ 1.txt
指定输出分割符 awk -F ‘:’ ‘$1~/root/{OFS=”#”;print $1,$2}’ 1.txt
多次匹配 awk -F ‘:’ ‘/root/{print $1,$3};$1~/test/;$3~/20/’ 1.txt条件操作符==,>,<,!=,>=,<=awk -F ‘:’ ‘$3=="0"’ 1.txt;
awk -F ‘:’ ‘$3>="500"’ 1.txt;
awk -F ‘:’ ‘$7!="/sbin/nologin"’ 1.txt;
awk -F ‘:’ ‘$3<$4’ 1.txt;
awk -F ‘:’ ‘$3>"5"&&$3<"7"’ 1.txt
awk -F ‘:’ ‘$3>"5"||$7=="/bin/bash"’ 1.txtawk内置变量 NF(段数) NR(行数)head -n3 1.txt|awk -F ‘:’ ‘{print NF}’
head -n3 1.txt|awk -F ‘:’ ‘{print $NF}’
head -n3 1.txt|awk -F ‘:’ ‘{print NR}’打印20行以后的行 awk ‘NR>20’ 1.txt打印段数大于3小于10的行,awk -F ‘:’ ‘NF>3&&NF<10{print}’ 1.txt
awk -F ':' 'NR>20'&&'$1~/ssh/' 1.txt;更改某个段的值awk -F ':' '$1=”root”' 1.txt;数学计算,把第三段和第四段值相加,并赋予第七段awk -F ':' '{$7=$3+$4;print $0}' 1.txt;
<
915d
span style="font-family:'宋体';">计算第三段的总和 awk -F ':''{(tot=tot+$3)};END{print tot}' 1.xt;awk中也可以使用if关键词awk -F ':' '{if($1=="root")print $0}' 1.txt;
相关文章推荐
- Vbird的Linux私房菜学习笔记之正则表达式-awk
- 【学习笔记——Linux】Linux正则表达式和文件格式化处理
- linux学习笔记-第十二课-Shell脚本之正则表达式(一)
- [linux学习笔记] 使用fedora20搭建开发环境
- Linux学习笔记(8)----基础正则表达式
- Linux系统学习之正则表达式笔记
- Vbird的Linux私房菜学习笔记之正则表达式-特殊字符
- python socket 的使用 - 千月的python linux 系统管理指南学习笔记(20)
- 【Linux学习笔记】20:Bash基础-历史命令
- linux命令学习笔记(20):find命令之exec
- Zynq-Linux移植学习笔记之20-Zynq linux can驱动开发
- Linux-正则表达式 学习笔记(一)
- Linux运维学习笔记之六:Linux中的文件类型、属性、正则表达式、权限体系
- 【Linux学习笔记九】Shell编程-正则表达式
- Linux 学习笔记 -- 第三部分 学习 shell 与 shell script -- 第12章 正则表达式与文件格式化处理
- Linux学习笔记(正则表达式)
- Vbird的Linux私房菜学习笔记之正则表达式-sed
- linux学习笔记: grep命令,正则表达式
- Linux学习笔记20——第一个多线程程序
- Linux学习笔记(正则表达式-1)