一、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結尾的行
示例:
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出現一次且結尾的行
示例:
二、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
c模式:替換
sed '/^UUID/c/hello' /mnt/fstab 替換UUID開頭的行為hello
w模式:插入
sed '/^UUID/w /mnt/hello' /mnt/fstab 将/mnt/fstab中的UUID開頭的行輸入到/mnt/hello中
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}'
[[email protected] mnt]# ifconfig eth0 | awk -F " " '/inet /{print $2}'
172.25.254.177