Linux 4.15 rc7,Linux学习之十五(sed命令)-2017-4-23
sed命令:流編輯器
1、sed基本用法:
sed:Stream EDitor
行編輯器(全屏編輯器:vi)
2、sed:模式空間(默認不編輯原文件,僅對模式空間中的數據做處理,處理結束后,將模式空間打印至屏幕)
3、sed? [options] 'AddressCommand' file.....
-n:靜默模式,不再默認顯示模式空間中的內容
例如:[root@Ourlab ~]# sed -n '/^L/p' /etc/fstab
LABEL=/???????????????? /?????????????????????? ext3??? defaults??????? 1 1
LABEL=/home???????????? /home?????????????????? ext3??? defaults??????? 1 2
LABEL=/boot???????????? /boot?????????????????? ext3??? defaults??????? 1 2
LABEL=SWAP-sda5???????? swap??????????????????? swap??? defaults??????? 0 0
-i:直接修改原文件
-e script -e script:可以同時執行多個腳本
-f /path/to/sed_script:把腳本中保存的命令應用于指定的文件中
用法:sed -f /path/to/scripts file
-r:表示使用擴展正則表達式
Address:
1、StartLine,EndLine
比如:1,100
$:最后一行
例如:[root@Ourlab ~]# sed '3,$d' /etc/fstab
2、/RegExp/
比如:/^root/
例如:[root@Ourlab ~]# sed '/oot/d' /etc/fstab
3、/Pattern1/,/pattern2/:第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的所有行
4、LineNumber:指定的行
5、StartLine, +N:從startline開始,向后的n行;
例如:[root@Ourlab ~]# sed '1,+2d' /etc/fstab
Command:
d:刪除符合條件的行
例:[root@Ourlab ~]# sed '1,2d' /etc/fstab
p:顯示符合條件的行
例如:[root@Ourlab ~]# sed -n '/^L/p' /etc/fstab
LABEL=/???????????????? /?????????????????????? ext3??? defaults??????? 1 1
LABEL=/home???????????? /home?????????????????? ext3??? defaults??????? 1 2
LABEL=/boot???????????? /boot?????????????????? ext3??? defaults??????? 1 2
LABEL=SWAP-sda5???????? swap??????????????????? swap??? defaults??????? 0 0
a \string:在指定的行后面追加新行,內容為string
例如:[root@Ourlab ~]# sed '/^L/a \#hello world' /etc/fstab
LABEL=/???????????????? /?????????????????????? ext3??? defaults??????? 1 1
#hello world
\n:可以用于換行
i \string:在指定的行前面添加新行,內容為string
r filename:將指定的文件的內容添加至指定的行處
例如:[root@Ourlab ~]# sed '2r /etc/issue' /etc/fstab
LABEL=/???????????????? /?????????????????????? ext3??? defaults??????? 1 1
LABEL=/home???????????? /home?????????????????? ext3??? defaults??????? 1 2
Red Hat Enterprise Linux Server release 5.8 (Tikanga)
Kernel \r on an \m
w filename:將指定范圍內的內容另存至指定的文件中;
例如:[root@Ourlab ~]# sed '/oot/w /tmp/oot.txt' /etc/fstab
[root@Ourlab ~]# cat /tmp/oot.txt
LABEL=/boot???????????? /boot?????????????????? ext3??? defaults??????? 1 2
s/pattern/string/修飾符:查找并替換,默認只替換每行中第一次被匹配到的符串
例如:[root@Ourlab ~]# sed 's/oot/OOT/' /etc/fstab
LABEL=/bOOT???????????? /boot?????????????????? ext3??? defaults??????? 1 2
加修飾符:
g:全局替換
例如:[root@Ourlab ~]# sed 's/oot/OOT/g' /etc/fstab
LABEL=/bOOT???????????? /bOOT?????????????????? ext3??? defaults??????? 1 2
i:忽略字符大小寫
s///(s###,s@@@):分隔符不局限于‘/’,只要保證三個一致,可替換成其他符號;
例如:[root@Ourlab ~]# sed 's#oot#OOT#g' /etc/fstab
&:引用模式匹配整個串
任務1:like替換為liker,love替換為lover
例如:例如:[root@Ourlab ~]# sed 's#l..e#&r#g' sed.txt
hello,liker
hi,my lover
后向引用:\(\),\1,\2
任務2:like替換為Like,love替換為Love
例如:[root@Ourlab ~]# sed 's#l\(..e\)#L\1#g' sed.txt
hello,Like
hi,my Love
課后練習:
1、刪除/etc/grub.conf文件中行首的空白符;
[root@Ourlab ~]# sed 's/[[:space:]]//g' /etc/grub.conf
2、替換/etc/inittab文件中“id:3:initdefault:”一行中的數字為5;
[root@Ourlab ~]# sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
3、刪除/etc/inittab文件中的空白行;
[root@Ourlab ~]# sed '/^$/d' /etc/inittab
4、刪除/etc/inittab文件中開頭的#號;
[root@Ourlab ~]# sed 's/^#//g' /etc/inittab
5、刪除/etc/inittab文件中開頭的#號,但要求#號后面必須有空白字符;
[root@Ourlab ~]# sed -r 's/^#[[:space:]]+//g' /etc/inittab
6、刪除某文件中以空白符后面跟#類的行中的開頭的空白字符及#;
[root@Ourlab ~]# sed -r 's/^[[:space:]]+#//g' ./testsed.txt
7、取出/etc/rc.d/abc/cef/文件路徑的目錄名稱;
[root@Ourlab ~]# echo "/etc/rc.d/abc/cef/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
閱讀(360) | 評論(0) | 轉發(0) |
總結
以上是生活随笔為你收集整理的Linux 4.15 rc7,Linux学习之十五(sed命令)-2017-4-23的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果系统安装服务器打印机,如何在MAC系
- 下一篇: OC 教程 极光推送