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 ~]# ====
sed 及正則表達式的用法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.