sed是可以不打開文件進(jìn)行增刪改查,vim的缺點(diǎn)是打開文件會(huì)把文件加載到我們的內(nèi)存中,占用我們的內(nèi)存,sed不會(huì)把文件加載到內(nèi)存當(dāng)中。
要先觀察格式
格式
sed 選項(xiàng) sed命令 文件名
-n 不輸出模式空間里的內(nèi)容
-e 執(zhí)行多條sed命令
-r 使用拓展正則時(shí)用-r
-i 直接修改文件內(nèi)容
a 追加在指定行的下面
如何追加多行
sed ‘2i ok\nok1\nok3’ 文件名
c 取代指定行
d 刪除,可以支持多行,比如1,3就是第一行和第三行
刪除所有行
sed ‘d’ 文件名
i 插入在指定行的上面
p 輸出指定內(nèi)容c
一般結(jié)合-n使用,sed ‘/root/p’ –n /etc/passwd
! 取反,放在命令前面
1.查找指定的字符串
例子:顯示/etc/passwd中保含root的行(顯示模式空間中的內(nèi)容)
方法1:sed '/root/p' /etc/passwd
方法2:cat /etc/passwd | sed '/root/p'
2.在指定的位置做增刪
例子:刪除以root為開頭的行
# sed '/^root/d' a.txt
例子:在包含root的行后添加一行 i am ken
# sed '/root/a i am ken' a.txt
3.按行替換
例子:將5到9行的內(nèi)容替換為 i am ken
# sed '5,9c i am ken' a.txt
4.按照字符替換
例子:將/etc/selinux/config中的SELINUX=enforcing改成 disabled
寫法1:# sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' config
寫法2:# sed -r -i 's/(SELINUX=)disabled/\1enforcing/g' config
5.查找指定的內(nèi)容再做替換
例子:將以r開頭的行中的oo替換為qq
# sed '/^r/{s/oo/qq/g}' passwd
6.多點(diǎn)編輯
例子:去除文件中的注釋行和空白行
# grep -v -E "(^#)|(^$)" passwd.bak >passwd
# cat passwd.bak | sed -e '/^#/d' -e '/^$/d' >passwd
7.取反操作
顯示非1-3行
# sed -n '1,3!p' passwd
格式
awk awk參數(shù) ‘匹配的是什么東西{對(duì)這個(gè)東西做什么}’ file
常用參數(shù)只有一個(gè) –F 指定分隔符
記錄(record):一行就是一個(gè)記錄
分隔符(field separator):進(jìn)行對(duì)記錄進(jìn)行切割的時(shí)候所使用的字符
字段(field):將一條記錄分割成的每一段
FILENAME:當(dāng)前處理文件的文件名
FS(Field Separator):字段分隔符(默認(rèn)是以空格為分隔符=)
NR(Number of Rrecord):記錄的編號(hào)(awk每讀取一行,NR就加1==)
NF(Number of Field):字段數(shù)量(記錄了當(dāng)前這條記錄包含多少個(gè)字段==)
1. 結(jié)合內(nèi)置變量,打印指定的幾行,以及字段數(shù)量
例子;輸出有多余5個(gè)字段的行的第三個(gè)字段
# cat a.sh | awk -F ":" 'NF>=5{print $3}'
例子:輸出每行行號(hào)和該行有幾個(gè)字段
# cat a.sh | awk -F ":" '{print NR,NF}'
例子:輸出用戶名,要求所有用戶顯示在同一行,而且用空格分隔
# cat mypwd | awk 'BEGIN{FS=":"; ORS=" "}{print $1}'
2. 結(jié)合正則來匹配一行或者某個(gè)字段
例子:輸出用戶名以s為開頭的用戶的uid
# cat mypwd | awk -F ":" '/^s/{print $}'
例子:輸出第五個(gè)字段是以t為結(jié)尾的用戶的姓名
# cat mypwd | awk -F ":" '$5~/t$/{print $1}'
3. 采用比較符號(hào)來進(jìn)行打印指定的某些行
例子:實(shí)現(xiàn)僅僅輸出3-5的內(nèi)容,每行前面添加一個(gè)行號(hào)
# cat mypwd | awk 'NR>=3&&NR<=5{print NR,$1}'
或
# cat mypwd | awk 'NR==3,NR==5{print NR,$1}'
例子:實(shí)現(xiàn)僅僅輸出3 和 5 和 7行的內(nèi)容,每行前面添加一個(gè)行號(hào)
# cat mypwd | awk 'NR==3||NR==5||NR==7{print NR,$1}'
4. END
例子:統(tǒng)計(jì)mypwd中以#開頭的行有多少行
# cat mypwd | awk 'BEGIN{n=0}/^#/{n =1}END{print n}'
統(tǒng)計(jì):mypwd中,以:為分隔符,字段數(shù)量在3-5的行的數(shù)目
# cat mypwd | awk 'BEGIN{FS=":"}NF>=3&&NF<=5{n =1}END{print n}'
5. ip
例子:統(tǒng)計(jì)IP
[root@ken]# cat url.txt | awk -F "/ " '{urls[$2] }END{for(key in urls)print key, urls[key]}’
www.baidu.com 12
haha.baidu.com 1
ftp.baidu.com 6
mail.baidu.com 7
來源:http://www.icode9.com/content-4-204601.html聯(lián)系客服