1. 處理純文本文件、日誌、配置文件vim
2. 增刪改查bash
3. 查看sed版本:sed --versionapp
1. sed [選項] [sed指令] [輸入文件]編輯器
2. sed -i.bak 's#oldboy#oldbgirl#g' oldboy.txt3d
3. -i ---sed命令的參數日誌
4. s --sed指令orm
5. g ---就是個修飾blog
1. 把內容讀取到內存中(模式空間)內存
2. 判斷是不是知足我要的條件(默認都會顯示到屏幕)it
3. 3. sed有個默認輸出因此不加-n,都會顯示到屏幕
4. 繼續讀取直到最後一行
實驗環境:
[root@georgekai ~]# vim person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
實例1-1 查詢p(print)
1. 單行 - 行號
[root@georgekai ~]# sed -n '3p' person.txt
2. 找出包含oldboy的行
[root@georgekai ~]# sed -n '/oldboy/p' person.txt
注://中間能夠寫須要找的內容
3. 多行連續顯示(知道行號)
[root@georgekai ~]# sed -n '1,3p' person.txt
4. 多行連續顯示,顯示包含oldboy的行到包含yy的行(不知道行號,模糊查找)
[root@georgekai ~]# cat person.txt|sed -n '/oldboy/,/yy/p'
5. 顯示不連續的行
[root@georgekai ~]# nl person.txt |sed -n '1p;3p;4p'
注:sed或awk中,加多個命令,用分號分割(;)
實例1-2 增長
1. 在文件最後一行增長倆行
方法一:[root@georgekai ~]# echo -e "106,wuxingge,UFO\n107,lee,XO" >>person.txt
方法二:[root@georgekai ~]# nl person.txt |sed -n '$a 106,wixingge,UFO\n107,lee,XO.p'
注:1. 這裏的$表示最後一行,a前面可加行號
2. a === append追加,當前行的下一行追加
3. i === insert插入,當前行的上一行插入
4. 中間的\n ,表示回車鍵
方法三:[root@georgekai ~]# cat >> person.txt <<EOF
EOF
實例1-3 刪除
1. 單行刪除
[root@georgekai ~]# nl person.txt |sed '1d' -i
2. 多行刪除
[root@georgekai ~]# cat person.txt |sed '/old/,/yy/d'
root@georgekai ~]# cat person.txt|sed '1d;3d;4d;5d'
2.不顯示文件的空行
方法一:[root@georgekai ~]# cat person.txt |grep -v '^$'
方法二:[root@georgekai ~]# cat person.txt |sed -n '/^$/!p'
注:!在sed中也是取反的意思
方法三:[root@georgekai ~]# cat person.txt |sed '/^$/d'
方法四:[root@georgekai ~]# cat person.txt |awk '!/^$/'
實例1-4 替換s
注:在「s###g」中遇到以#開頭的條件,3個#能夠用3個@代替
1. 不加小g,默認只替換每一行的第一個找到的條件
[root@georgekai ~]# sed 's#[1-9]#AAAA#' person.txt
注:後面加g,會替換每一行知足條件的全部
2. 備份
[root@georgekai ~]# sed -i.bak.$(date +%F) 'sg#old#boy#' person.txt
注:先備份源文件,在修改源文件的內容
3. sed中變量的使用
[root@georgekai ~]# x=oldboy
[root@georgekai ~]# y=oldgirl
[root@georgekai ~]# sed "s#$x#$y#g" person.txt
注:sed的使用變量須要用雙引號
4. 單引號與雙引號區別
[root@oldboyedu43-lnb oldboy]# echo 'I'am lee'
> ^C
[root@oldboyedu43-lnb oldboy]# echo "I'am lee"
I'am lee
[root@oldboyedu43-lnb oldboy]# echo 'I"am" lee'
I"am" lee
實例1-5 反向引用(先保護,在使用)
1. &符號的做用
[root@georgekai ~]# echo '123456' |sed -r 's#.#<&>#g'
<1><2><3><4><5><6>
注:& 表示前倆個#號中間正則匹配到的全部內容
2. 命令拼接,批量修改文件名稱
建立環境:
[root@georgekai ~]# touch oldboy{01..10}.jpg
如何修改:
方法一:[root@georgekai ~]# ls oldboy*.avi|sed -r 's#(.*).avi#mv & \1.jpg#g'|bash
注:1.bash的做用,執行前面管道後輸出的內容
2.& 表示前倆個#號中間正則匹配到的全部內容
3.\1 表示前面()中的內容
方法二:把以txt結尾的文件,中的txt替換成jpg
[root@georgekai ~]# rename txt jpg old*.txt
[root@georgekai ~]# ls
oldboy01.jpg oldboy04.jpg oldboy07.jpg oldboy10.jpg
oldboy02.jpg oldboy05.jpg oldboy08.jpg person.txt
oldboy03.jpg oldboy06.jpg oldboy09.jpg
格式:
rename form to file
要替換的源內容是什麼 替換成什麼內容 替換哪些文件
jpg avi *.jpg
1. -r與-i同時使用
-ri (正常):先使用擴展正則,在修改文件內容
-ir :先備份文件名爲「什麼什麼r」的備份文件,而後在替換源文件中的內容
2. -i禁止與-n一塊兒使用
如:sed -ni '1p' person.txt 會把源文件內容清空,只留下第一行