天天看點

linux—shell中的正規表達式一、grep二、sed行編輯器三、awk

一、grep

1、grep概述

文本過濾指令:grep是一種文本搜尋工具,根據使用者指定的“模式”對目标文本進行比對檢查,列印比對到的行;

grep:由正規表達式或者字元及基本文本字元所編寫的過濾條件;

2、grep比對字元

-E 拓展正規表達式

grep root passwd 查找包含root的關鍵詞

[[email protected] mnt]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/root
test:x:0:0:root
redhat:x:0:0:westosroot
           
grep -E "\<root" passwd      模糊比對以root開頭的詞
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/root
test:x:0:0:root
[[email protected] mnt]# grep -E "root\>" passwd   模糊比對以root字元結尾的關鍵詞
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/root
test:x:0:0:root
redhat:x:0:0:westosroot
[[email protected] mnt]# grep -E "\<root\>" passwd   精确比對root字元
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/root
test:x:0:0:root
[[email protected] mnt]# grep -E -i "\<root\>" passwd   忽略大小寫比對root字元
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/Root
test:x:0:0:root
[[email protected] mnt]# grep -E -i "^\<root\>" passwd    忽略大小寫比對root開頭額行
root:x:0:0:root:/root:/bin/bash
[[email protected] mnt]# grep -E -i "\<root\>$" passwd    忽略大小寫比對root結尾的行
test:x:0:0:root:/rootwestos:/Root
test:x:0:0:root
[[email protected] mnt]# grep -E -i "root|ROOT" passwd 模糊過略root或ROOT字元
root:x:0:0:root:/root:/bin/bash
westos:x:0:0:root:/root:/bin/bash
test:x:0:0:root:/rootwestos:/Root
test:x:0:0:root
redhat:x:0:0:westosroot
           

2、…的使用(貪婪比對)

grep -E "x.." file	查找file中有x且後面有兩個字元的行
grep -E "x..\>" file	查找file中有x且後面隻有兩個字元的行
grep -E "\<x.." file	查找file中有x開頭且後面有兩個字元的行
grep -E "\<x..\>" file	查找file中有x開頭且後面隻有兩個字元結尾的行
grep -E "\<..y\>" file	查找file中有兩個字元開頭且以y結尾的行
grep -E "..y\>" file	查找file中有兩個字元在前面且y結尾的行
           

示例:

linux—shell中的正規表達式一、grep二、sed行編輯器三、awk

3、* ? {} , + 等字元的比對查找

grep -E "x*y" file	查找file中x字元出現任意次後面有y的行
grep -E "x?y" file	查找file中x字元出現0到1次後面有y的行
grep -E "\<x?y" file	查找file中x出現1次開頭以y結尾的行
grep -E "\<x{2}y" file	查找file中x出現兩次下一個字元是y的行
grep -E "\<x{0,2}y" file查找file中x出現0到2次打頭後面有y的行
grep -E "\<x+y" file	查找file中x最少出現1次以上且開頭後面有y的行
grep -E "(xy)+" file	查找file中xy出現一次以上的行
grep -E "(xy)+\>" file	查找file中xy出現一次且結尾的行
           

示例:

linux—shell中的正規表達式一、grep二、sed行編輯器三、awk
linux—shell中的正規表達式一、grep二、sed行編輯器三、awk

二、sed行編輯器

用來操作ASCII碼的文本,處理時,把目前處理的行存儲在臨時緩沖區中,稱為“模式空間”,可以指定僅僅處理那些行。sed符合模式田間的處理,不符合的不處理,處理完成之後把緩沖區的内容送往螢幕,接着處理下一行,這樣不斷重複,知道檔案末尾,不對原檔案内容作修改

1、sed指令格式

sed 參數 指令 目标

p模式:顯示

sed -n '/\#/p'  fstab 	   顯示fstab中包含#的行
sed -n '/UUID/p' fstab	   顯示fstab中包含UUID的行
sed -n '/^UUID/p' fstab	   顯示fstab中UUID開頭的行
sed -n '/UUID$/p' fstab	顯示fstab中UUID結尾的行
set -n '5p'	fstab	       顯示fstab中的第五行
sed -n '3,5p'	fatab	   顯示fstab中的第三到第五行
sed -n '3,5!p'	fatab	  顯示除了第三行到第五行的其他行
sed -ne '3p;5p;8p'fstab	   顯示fstab中的第三,第五,第八行 -e為多條指令連接配接
sed -n '/\#/p' -i fstab    顯示fstab中的包含#的行,并輸入到fstab中
           

d模式:删除

sed '/^#/d'  fstab	    删除fstab中#開頭的行并顯示在螢幕
sed '/^UUID/d' fstab	删除fstab中UUID開頭的行并顯示
sed '/UUID$/d' fstab	 删除fstab中UUID結尾的行并顯示
sed '1,4d' fstab	    删除fstab中第1到4行并顯示其他行
sed   '/^UUID/!d' fstab	删除除了UUID開頭的行并顯示
           

a模式:添加

sed '/UUID$/a hello' fstab	     顯示fstab内容并在UUID結尾的行後添加一行hello
sed '/UUID$/a hello\nsed\ntest' 顯示fstab内容并在UUID結尾的行後添加一行hello和一行test
           
linux—shell中的正規表達式一、grep二、sed行編輯器三、awk

c模式:替換

sed '/^UUID/c/hello' /mnt/fstab   替換UUID開頭的行為hello
           
linux—shell中的正規表達式一、grep二、sed行編輯器三、awk

w模式:插入

sed '/^UUID/w /mnt/hello'  /mnt/fstab	将/mnt/fstab中的UUID開頭的行輸入到/mnt/hello中
           
linux—shell中的正規表達式一、grep二、sed行編輯器三、awk

sed的其他用法

sed '/^UUID/mnt/fstab='/mnt/fstab	顯示UUID開頭的行的行數
sed '6r /mnt/hello1' /mnt/fstab 	将fstab中的第六行插入到hello1中
sed '6r /mnt/hello1' /mnt/fstab 	最後一行
sed '1r /mnt/hello1' /mnt/fstab		第一行
sed 'r /mnt/hello1' /mnt/fstab		每一行
sed -n '/^UUID/=' fstab		        顯示行數
sed -n -e '/^UUID/p' -e '/^UUID/=' fstab多政策
sed -n -f westos fstab			westos中為政策(/^UUID/p
/^UUID/=)
sed 's/\# *//g' fstab 
sed '/by/,/See/s/\#\ *//g' fstab 
sed 'G' fstab 
sed '$!G' fstab 
sed '=' fstab | sed 'N;s/\n//'
sed '=' fstab | sed 's/\n//'
sed -n '$p' fstab 	顯示倒數第一行
sed -n '4p' fstab     顯示第四行 
sed '/^UUID/c\hello' fstab 
           

三、awk

awk -F : '/bash$/{ print $1 }' passwd  列出passwd檔案以/bash結尾的行的第一列
awk -F : 'BEGIN{ print "NAME" }{ print $1 } END { print "END" }' passwd 
awk -F : 'NR==3{ print $1 }'  passwd     顯示passwd第三行第一列
實作,列出eth0的ip
ifconfig eth0 | awk -F " " '/inet /{print $2}'
           
linux—shell中的正規表達式一、grep二、sed行編輯器三、awk
[[email protected] mnt]# ifconfig eth0 | awk -F " " '/inet /{print $2}'
172.25.254.177