您的位置:首页 > 运维架构 > Linux

linux学习笔记20-linux的正则

2018-01-11 23:41 204 查看
linux的正则一、grep/egrep 用于搜索搜索文本,并把匹配的行打印出来,egrep相当于grep的升级版
(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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: