美文网首页
关于正则

关于正则

作者: Al_不期而遇 | 来源:发表于2019-02-13 09:56 被阅读0次

head显示文件的前部

-n<行数> 显示的行数

    head -n 5 log2014.log    #显示文件前5行

-c<字节> 显示字节数

    head -c 5 log2014.log    #显示文件前5字符

tail 显示文件的后部

-n<行数> 显示行数

    tail -n5 log2014.log    #显示文件后5行

-f 循环读取

    tail -f test.log                #循环查看文件内容

    tail -100f test.log

sort对文件中的行排序

-t :指定分隔符

-kn1:对n1字段排序

-kn1,n2 :由n1区间排序到n2区间,可以只写

-u:去重复

          -n:使用纯数字排序

          -r :反向排序

sort /etc/passwd

不加任何选项,则从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

sort -t: -k3 -n /etc/passwd

以“:”为分隔符,对第3个区域使用纯数字对文件排序

sort -t: -k3,5 -r /etc/passwd 

以“:”为分隔符,从第3到第5区域间的字符串反向排序

cut    用来截取某一个字段

-d:后跟分隔符,分隔字符要用单引号括起来

-f :后面接的是第几个区块

-c :后面接的是第几个字符

cut -d ':' -f 1  /etc/passwd

使用冒号作为分割字符,截取第一段(-f和1之间的空格可有可无)

cut -d':' -f1,2,3 /etc/passwd

使用冒号作为分割字符,截取第一、二、三段

cut -d':' -f1-4 /etc/passwd

使用冒号作为分割字符,截取第一到第四段

cut -c1 /etc/passwd

截取第一字符

cut -c1-10 /etc/passwd

截取第一到第十字符

cut -c1,3,10 etc/passwd

截取第一,三,十字符           

uniq

    -c    去重复,标记重复次数

wc

    -l    统计行数

    -w    统计单词数

    -c   统计字符数

tee     输出到屏幕并且重定向

tr        替换

splitgrep(egrep)sed    awk

在正则表达式中, “^” 表示行的开始, “$” 表示行的结尾,空行则用 “^$” 表示。数字用[0-9]的形式,[15]即只含有1或者5,注意,它不会认为是15。如果要过滤出数字以及大小写字母则要这样写[0-9a-zA-Z]。[^字符] 表示除[ ]内的字符之外的字符。\<word\>表示完全匹配word,而不包括words等

#grep 搜索并把匹配的行打印(只能搜索,不能替换)

-c:只打印符合要求的行数

-w:精确匹配

-i:忽略大小写

-n :输出符合要求的行,连同行号一起输出

-v :打印不符合要求的行

-A :后跟数字,例如 –A2则表示打印符合要求的行以及下面两行(after)

-B :后跟数字,例如 –B2 则表示打印符合要求的行以及上面两行

-C :后跟数字,例如 –C2 则表示打印符合要求的行以及上下各两行

          -r  :遍历

练习:

grep 'root' -c passwd

打印passwd中还有root关键字的行数

grep -w car* nginx.log

答应有car*的行,而不是car开头的行

grep -i  'root' passwd

打印passwd中还有root(ROOT)关键字的行

grep -n 'root' passwd

打印passwd中还有root关键字的行连同行号一起输出

grep -v  '/sbin/nologin' passwd

打印passwd中不包含/sbin/nologin有关键字的行

grep -A2 'halt' passwd

打印passwd中包含有halt关键字的行和下两行

grep -B3 'halt' passwd

打印passwd中包含有halt关键字的行和上三行

grep -C4 'halt'  passwd

打印passwd中包含有halt关键字的行和上下各四行

grep -v '[0-9]' /etc/inittab

打印inittab中不包含数字的行

grep -v '^#' /etc/inittab

打印inittab中没有被注释(#开头,用^#表示)的行

grep -v 'n$' /etc/passwd

过滤以n结尾的行

grep -v '^$' /etc/inittab |grep -v '^#'

打印inittab中的空行(^$)和注释行

grep '^[A-Za-z]'  /etc/inittab

打印inittab中以字母开头的行

grep '^[^A-Za-z]'  /etc/inittab

打印inittab中不以字母开头的行

grep 'r..o' /etc/passwd

打印passwd中包含有r与o之间有两个任意字符的行

grep 'ooo*' /etc/passwd

打印passwd中包含有零个或多个ooo字符的行(*表示零个或多个前面的字符)

grep '.*' /etc/passwd

打印整个文件(‘.*’ 表示零个或多个任意字符,空行也包含在内)

grep 'o\{2\}' /etc/passwd

打印表示包含有'oo'的行({ }左右都需要加上脱意字符 ‘\’, 另外,使用{ }还可以表示一个范围的,‘{n1,n2}’ 其中n1<n2,表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次)

grep '(.*)' test.txt 

(1234445)

(azc)

grep '(.*[0-9])' test.txt 

(1234445)

查找文件内容

# grep -nir "root" ./*

# grep -nir "^root" ./*

# grep -nir "root$" ./*

#sed   处理文本的行并输出到屏幕上

1.打印某行(-n p)

sed -n '2'p /etc/passwd

打印passwd的第2行

sed -n '1p;4p;5p' /etc/passwd

打印第1,4,5行

sed -n '1,$'p /etc/passwd

打印passwd的所有行

sed -n '1,3'p /etc/passwd

打印passwd的1-3行

2.打印包含某个字符串的行

sed -n '/root/'p /etc/passwd

打印passwd中包含root关键字的行

sed -n '/^1/'p /etc/passwd

打印passwd中包以1开头的行

sed -n '/sh$/'p /etc/passwd

打印passwd中以sh结尾的行

sed -n '/r...o/'p /etc/passwd

打印passwd中r和o之间有三个字符的行

sed -n '/ooo*/'p /etc/passwd

打印passwd中有ooo字符的行

sed -nr '/root\|mysql/p'/etc/passwd

sed -n '/root/p;/bash/p' /etc/passwd

打印passwd中有root或者mysql字符的行

sed -n '/root/{/bash/p}' /etc/passwd

打印passwd中即有root又有bash字符的行

3.实现多个行为(-e)

 sed -ne  '2p' -e '/bash/p' /etc/passwd

打印第2行和包含有bash的行

4.删除行(d)

sed '1'd /etc/passwd

删除第1行

sed '1,3'd /etc/passwd

删除1-3行

sed '/root/'d /etc/passwd

删除包含有root关键字的行

5.替换(s,g 不加g只替换行中第一个,其中的//分隔符可以用#、@代替)

sed '1,3s/root/ROOT/g' /etc/passwd

替换1-3行中所有的root为ROOT

sed 's/[0-9]//g' /etc/passwd

替换所有的数字为空,删除所有数字

sed 's/[a-zA-Z]/*/g' /etc/passwd

替换所有的字母为*

sed 's#sbin/nologin#bin/login#g' /etc/passwd

替换/sbin/nologin为/bin/login

sed 's/[^|]\+/YY/5' /etc/passwd

替换第5个|后边的内容为YY

sed 's/^[ \t]*//g'/etc/passwd

删除行首的tab空格(^[  \t],是以空格或者tab键开头)

sed 's/[ \t]*$//g'/etc/passwd

删除行尾tab空格

# sed 's/bash$/BASH/g' /etc/passwd

# sed 's/^bash/BASH/g' /etc/passwd

sed -nr '/.*/p' /etc/passwd

匹配全部内容

sed中,使用\u表示大写,\l表示小写

1. 把每个单词的第一个小写字母变大写:

sed 's/\b[a-z]/\u&/g' filename

2. 把所有小写变大写:

sed 's/[a-z]/\u&/g' filename

3. 大写变小写:

sed 's/[A-Z]/\l&/g' filename

6.调换字符串位置

7.直接修改文件的内容

sed  -i  '1,3s/root/ROOT/g' /etc/passwd

替换1-3行中所有的root为ROOT并且写入文件

sed -i  '4a 1111111111' /etc/passwd

在第四行后面添加行,内容为“1111111111111111111111”

#awk  文本分析处理#

1.截取文档中的某个段(-F指定分隔符,如果不加-F指定,则以空格或者tab为分隔符。 Print用来打印出某个字段。$1为第一个字段,$2为第二个字段,依次类推,$0,表示整行。)

awk -F ':' '{print $1}' /etc/passwd

以:为分隔符,截取passwd的第一段

awk -F':' '{print $1"#"$2"*"$3"#"$4}' /etc/passwd

以:为分隔符,打印第2,3,4行,并用#隔开(自定义打印的#要用“”括起来)

awk '{for(i=N;i<=NF;i++)printf $i "  ";printf"\n"}' filename

打印第N列之后所有的列

awk -F: 'OFS=":"{$NF=null;print}' /etc/passwd

OFS指定输出分隔符,删除最后一列

# awk -F: 'OFS=":"{$1="ROOT";print $0}' /etc/passwd

OFS指定输出分隔符,替换第一列为ROOT

2.匹配字符或字符串

awk '/oo/' /etc/passwd

匹配字符oo

awk -F ':' '$1 ~/root/' /etc/passwd

匹配passwd中以:分割的第一段中含有root字符的行(这里的~就是匹配的意思)

awk -F ':' '$1 ~/root/ {print $1,$3} /mysql/ {print $0}' /etc/passwd

匹配passwd中以:分割,第一个字符包含root字符的行打印第1,3字符,包含mysql字符打印整行(awk多次匹配,匹配完root,再匹配test)

3.条件操作符

awk -F ':' '$3=="0"' /etc/passwd

匹配passwd中第3个字符为0的行(awk中是可以用逻辑符号判断的,比如 ‘==’ 就是等于,也可以理解为 ‘精确匹配’ 另外也有 >, ‘>=, ‘<, ‘<=, ‘!= 等等,值得注意的是,即使$3为数字,awk也不会把它当数字看待,所以不能去拿$3当数字去和数字做比较)

awk -F ':' '$7!="/sbin/nologin"' /etc/passwd

匹配passwd中以:分割第7个字符不为/sbin/nologin的行

awk -F ':' '$3<$4' /etc/passwd

匹配passwd中第3段与第4段进行逻辑比较

awk -F ':' '$3>"5" && $3<"7"' /etc/passwd

匹配passwd中第3段小于7大于5的行

awk -F ':' '$3>"5" || $7=="/bin/bash"' /etc/passwd

匹配passwd中第3段大于5或者第7段为/bin/bash的行

4.awk的内置变量(NF,$NF,NR)

awk -F':' '{print NF}' /etc/passwd    

打印passwd被:分割后共有多少段

awk -F':' '{print $NF}' /etc/passwd    

打印passwd被:分割后的最后一段的值

awk -F':' '{print $(NF-3)}' /etc/passwd

打印passwd被:分割后的倒数第三段

awk 'NR>20' /etc/passwd    

匹配passwd中行号大于20的行

awk -F ':' 'NR>20 && $1 ~ /ssh/' /etc/passwd    

匹配passwd中行号大于20并且以:分割第一个字符为ssh的行

ifconfig eth0 |awk -F '[ :]+' 'NR==2{print $4}'

打印第二行的第四段

5.awk中的数学运算

awk -F':' '$1="wang"' /etc/passwd

将passwd以:分割后修改第一个字符为wang

awk -F':' '{$8=$3+$4;print $0}' /etc/passwd

将passwd以:分割,计算第3和第4字符的和输出为第8字符,并且打印整行

练习:

awk -F: '{sum+=$3} END {print "SUM = ",sum}' /etc/passwd

将passwd以:分割,计算第3段和

awk -F ':' '{if ($1=="root") print $0}' /etc/passwd 

将passwd以:分割,如果第1段为root,打印整行

awk -F' ' '$1 ~/^1/' access.log

将access.log以空格分割,打印第1段以1开头的行

awk '$2 ~/^[0-9]/ {print $0}' 123

第二段如果以数字开头,打印整行

相关文章

  • 2018-09-11 day17-正则表达式

    正则表达式 python关于正则的支持 提供内置模块re fullmatch(正则表达式, 字符串) - 判断字符...

  • 关于正则

    概念: 正则表达式(Regular Expression)是计算机科学的一个概念。正则表达式使用单个字符串来描述、...

  • 关于正则

    --------------------------正则的作用--------------------------...

  • 关于正则

    正则表 1.NSPredicate(谓词) 谓词一般用于校验特定字符串的格式是否正确,使用方法很灵活。 -(BOO...

  • 关于正则

    关于正则 1. 正则表达式入门 创建一个正则表达式对象参数1: 模式参数2: 修饰符 g:global i:i...

  • 关于正则

    匹配 多个类名中的指定类名如 'target row1 color3 act' 中的color3但是后面的数字不确...

  • 关于正则

    head显示文件的前部 -n<行数>显示的行数 head-n5log2014.log#显示文件前5行 -c<字节>...

  • 正则表达式提取器-Jmeter

    1.关于正则表达的小问题

  • 正则表达式

    正则表达式介绍: //正则表达式不是js中的独有功能//其他的一些语言中也有正则的实现方式,当我们在查看关于正则的...

  • 正则表达式入门

    正则表达式 关于正则表达式相信很多学计算机的人都听说过 尤其是做编程行业的人 那什么是正则表达式 正则表达式,又称...

网友评论

      本文标题:关于正则

      本文链接:https://www.haomeiwen.com/subject/pjjreqtx.html