sed 及正則表達式的用法

  sed是一種支持正則表達式的非交互式流編輯器(stream editor)
腳本中修改文本或者文本替換的最佳工具
sed的語法命令格式
sed  [選項]   sed編輯命令   輸入文件
shell 命令  |  sed  [選項]   sed編輯命令 
sed  [選項]   -f  sed腳本文件   輸入文件

sed的常用選項
-n:只顯示匹配處理的行(否則會輸出所有)
-e:執行多個編輯命令時(一般用;代替)
-i:直接在文件中進行修改,而不是輸出到屏幕
-r:支持擴展正則表達式
-f:從腳本文件中讀取內容並執行(文件中的編輯命令每行一個,不用;隔開)
===
sed的常用編輯命令
p:打印匹配行 print
d:刪除指定行 delete
a:在匹配行後面追加 append
i:在匹配行前面插入 insert
c:整行替換
r:將文件的內容讀入  read
w:將文本寫入文件  write
s:字符串替換(匹配正則表達式)substitution
===
[root@teacher sed]# sed -n  '10p' passwd   輸出第10行
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
[root@teacher sed]# sed -n '10,+2p' passwd   輸出第10行和後面2行
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[root@teacher sed]# sed -n '10,15p' passwd   輸出第10行到15行的內容
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
[root@teacher sed]# sed -n  '10p;18p' passwd  輸出第10行和第18行
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
[root@teacher sed]# 
===
[root@teacher sed]# lftp 10.0.2.253
lftp 10.0.2.253:~> cd note/zhoumo-4ban/song/
lftp 10.0.2.253:/note/zhoumo-4ban/song> get list 
415 bytes transferred
lftp 10.0.2.253:/note/zhoumo-4ban/song> quit
[root@teacher sed]# ls
list  passwd
[root@teacher sed]# cat list 
1 昆
2 林昀
3 世紀
===
[root@teacher sed]# cat list |sed -n '4,30!p'   不顯示第4到30行的內容 !非的意思
1 昆
2 林昀
3 世紀
31 彬彬
32 擎
33 老師
34 皓
35 姐
36 張

[root@teacher sed]# 
===
不想顯示第10到20行和第5到第8行的內容
[root@teacher sed]# cat list |sed -n '10,20!p'|sed -n '5,8!p'
===
[root@teacher sed]# cat list |sed -n '/王/p'
6 王琛暉
29 王龍
[root@teacher sed]#
查找出姓王和姓李的同學的名字
[root@teacher sed]# cat list |sed -n '/王/p;/李/p'
6 暉
14 暢驊
29 龍
[root@teacher sed]# cat list |sed -n '/王/p;/李/p;/劉/p'
6 琛暉
8 利
9 甜
10 遵慶
14 暢驊
25 超
29 龍
[root@teacher sed]#
====
[root@teacher sed]# cp /etc/ssh/sshd_config ./
[root@teacher sed]# ls
list  passwd  sshd_config
[root@teacher sed]
[root@teacher sed]# cat sshd_config |sed -nr '/^#|^$/!p'  不顯示以#號開頭的行和空行  | 是或符號
Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
UseDNS no
Subsystem	sftp	/usr/libexec/openssh/sftp-server
[root@teacher sed]# 
==
^  代表以什麼開頭
$ 代表以什麼結尾
\ 轉義符號
==
[root@teacher sed]# df -Th  查看linux磁盤分區的使用情況(相當於windows裏打開計算機查看c、d、e盤的使用情況)
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda3     ext4    184G   83G   92G  48% /
tmpfs        tmpfs    1.9G  572K  1.9G   1% /dev/shm
/dev/sda1     ext4    485M   37M  423M   9% /boot
/dev/sda7     ext4    104G   46G   53G  47% /var/ftp/software
/var/ftp/software/iso/rhel6.4-x86_64.iso
           iso9660    3.5G  3.5G     0 100% /var/ftp/rhel6.4
/var/ftp/software/iso/rhel6.4-x86_64.iso
           iso9660    3.5G  3.5G     0 100% /local-yum
[root@teacher sed]# df -Th|sed -nr '/\/$/p' 以/結尾的行顯示
/dev/sda3     ext4    184G   83G   92G  48% /
[root@teacher sed]# df -Th|sed -nr '/\/$/p;/boot$/p'以/或者boot結尾的行顯示
/dev/sda3     ext4    184G   83G   92G  48% /
/dev/sda1     ext4    485M   37M  423M   9% /boot
[root@teacher sed]# 
編寫一個腳本disk_use.sh,實現顯示/分區用了多少,boot分區使用了多少空間
顯示效果如下:
             / partition  used  **
             boot partition  used  **
===
如果那個分區使用比例超過80%顯示 sir,your ** partition is full ,please remove something on it
如果沒有超過,顯示 sir,your disk partition is ok
===
[root@teacher sed]# cat disk_use.sh 
#!/bin/bash
#description:   display disk partition usage

root_part=`df -Th|sed -nr '/\/$/p'|awk '{print $6}'|awk -F% '{print $1}'`
boot_part=`df -Th|sed -nr '/boot$/p'|awk '{print $6}'|awk -F% '{print $1}'`


echo   /  partition used $root_part%
echo   /boot  partition used $boot_part%

[ $root_part -gt 80 ]&&echo your root partition is full ,please remove something on it||echo sir,your root partition is ok
[ $boot_part -gt 80 ]&&echo your boot partition is full ,please remove something on it||echo sir,your boot partition is ok

if [ $root_part -gt 80  ];then
    echo 	your root partition is full ,please remove something on it
else
    echo 	sir,your root partition is ok
fi

if [ $boot_part -gt 80  ];then
   echo	your boot partition is full ,please remove something on it
else
   echo 	sir,your boot partition is ok
fi

====



$? 代表上一條命令的執行結果的返回值  如果爲0 代表上一條命令執行成功,非0代表不成功
[root@teacher ~]# echo $?    
0
[root@teacher ~]# jfdkjfkdfjk
bash: jfdkjfkdfjk: command not found
[root@teacher ~]# echo $?
127
[root@teacher ~]#
====


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章