关于正则

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

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


仅供参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容