sed流編輯器

1、前言

(一)、sed 工做流程

  sed 是一種在線的、非交互式的流編輯器,它一次處理一行內容。處理時,把當作前處理的行存儲在臨時緩存區中,成爲「模式空間」(pattern space),接着用sed命令處理緩存區中的內容,處理完成後,把緩存區的內容送往屏幕。接着處理下一行,這樣不斷從新,直到文件末尾,文件內容並無改變,除非你使用重定向存儲輸出。sed主要來自動編輯一個或多個文件,簡化問文件的反覆操做,編寫轉換程序等;linux

(二)、sed 名利格式

sed [options] 'command' file(s) sed [options] -f scriptfile file(s)

注:nginx

  sed和grep不同,無論是否找到指定的模式,它的退出狀態都是0,只有當命令存在語法錯誤時,sed的退出狀態纔是非0正則表達式

(三)、支持正則表達式

  與grep同樣,sed在文件中查找模式時也可使用正則表達式(RE)和各類原字符,正則表達式是包括斜槓間的模式,用於查找和替換,如下是sed支持的元子浮。express

使用基本元字符集    ^, $, ., *, [], [^], \< \>,\(\),\{\} 使用擴展元字符集 ?, +, { }, |, ( ) 使用擴展元字符的方式: \+
sed -r

2、示例

(一)、基本用法

# sed -r '' /etc/passwd # sed -r 'p' /etc/passwd # sed -r -n 'p' /etc/passwd # sed -r -n '/root/p' /etc/passwd # sed -r 's/root/alice/' /etc/passwd # sed -r 's/root/alice/g' /etc/passwd # sed -r 's/root/alice/gi' /etc/passwd # sed -r '/root/d' /etc/passwd # sed -r '\#root#d' /etc/passwd

==========================================vim

[root@liwei ~] vim a.txt /etc/abc/456 etc [root@liwei ~]# sed -r '//etc/abc/456/d' a.txt sed:-e 表達式 #1,字符 0:no previous regular expression [root@liwei ~]# sed -r '/\/etc\/abc\/456/d' a.txt /etc/abc/456 [root@liwei ~]# sed -r '\#/etc/abc/456#d' a.txt /etc/abc/456 [root@liwei ~]# sed -r 's#/etc/abc/456#/dev/sda1#'

==========================================緩存

(二)、sed擴展

  ①地址(定址)ssh

  地址用於決定對哪些行進行編輯,地址形式能夠是數字、正則表達式或兩者的結合,若是沒有指定地址,sed將處理輸入文件中的全部行。編輯器

# sed -r 'd' /etc/passwd # sed -r '3d' /etc/passwd # sed -r '1,3d' /etc/passwd # sed -r '/root/d' /etc/passwd # sed -r '/root/,5d' /etc/passwd # sed -r 's/root/alice/g' /etc/passwd # sed -r '/^adm/,20d' /etc/passwd       //刪除到第20行
# sed -r '/^adm/,+20d' /etc/passwd    //再刪除20行
# sed -r '2,5d' /etc/passwd # sed -r '/root/d' /etc/passwd # sed -r '/root/!d' /etc/passwd # sed -r '1~2d' /etc/passwd                 //刪除全部奇數行 odd-numbered
# sed -r '0~2d' /etc/passwd                 //刪除全部偶數行 even-numbered

  ②sed命令spa

  sed 命令告訴sed對指定行進行任何操做,包括打印、刪除、修改等;3d

命令     功能 a //在當前行後添加一行或多行
c                       //用新文本修改(替換)當前行中的文本
d                       //刪除行
i                       //在當前行以前插入文本
l                       //列出非打印字符
p                       //打印行
n                       //讀入下一出入行,並從下一行命令而不是第一條命名開始對其的處理
!                       //對所選行之外的全部行應用命名
s                       //用一個字符串替換另外一個,(替換標誌)
g                       //全局(結合命令s)
i                       //忽略大小寫(結合命令s)
r                       //從文件中讀
w                       //將行寫入文件
y                       //將字符裝換爲另外一字符(不支持正則表達式)
h                       //把模式空間裏的內容複製到暫存緩存衝(覆蓋)
H                       //把模式空間裏的內容追加到暫存緩衝區
g                       //取出暫存緩衝區的內容,將其複製到模式空間,覆蓋該處原有內容
G                       //取出暫存緩衝區的內容,將其複製到模式空間,追加在原有內容
x                       //交換暫存緩衝區與模式空間的內容

  ③選項

選項 功能 -e                        //容許多項編輯
-f                        //指定sed腳本文件名
-n                        //取消默認的輸出
-i                        //inplace,就地編輯
-r                        //支持擴展元字符

3、實操示例

(一)、打印命令:p

# sed -r '/north/p' datafile # sed -r -n '/north/p' datafile

(二)、刪除命令:d

# sed -r '3d' datafile # sed -r '3{d;}' datafile # sed -r '3{d}' datafile
# sed -r '3,$d' datafile # sed -r '$d' datafile # sed -r '/north/d' datafile # sed -r '/sout/d' datafile

(三)、替換命令:s

# sed -r 's/west/north/g' datafile # sed -r 's/^west/north/' datafile # sed -r 's/[0-9][0-9]$/&.5/' datafile                //&表明在查找串中匹配到的內容
# sed -r 's/Hemenway/Jones/g' datafile # sed -r 's/(Mar)got/\1ianne/g' datafile # sed -r 's#3#88#g' datafile

(四)、讀文件命令:r

# sed -r '/Suan/r /etc/newfile' datafile # sed -r '2r /etc/hosts' a.txt # sed -r '/2/r /etc/hosts' a.txt

(五)、寫文件命令:w

# sed -r '/north/w newfile' datafile # sed -r '3,$w /new1.txt' datafile

(六)、追加命令:a

# sed -r '2a\1111111111111' /etc/hosts # sed -r '2a\1111111111111\
> 222222222222\ > 333333333333' /etc/hosts

(七)、插入命令:i

# sed -r '2i\1111111111111' /etc/hosts # sed -r '2i111111111\
> 2222222222\ > 3333333333' /etc/hosts

(八)、修改命令:c

# sed -r '2c\1111111111111' /etc/hosts # sed -r '2c\111111111111\
> 22222222222\ > 33333333333' /etc/hosts

(九)、獲取下一行命令:n

# sed -r '/eastern/{ n; d }' datafile # sed -r '/eastern/{ n; s/AM/Archile/ }' datafile

(十)、暫存和取用命令:h H g G

# sed -r '1h;$G' /etc/hosts # sed -r '1{h;d};$G' /etc/hosts # sed -r '1h; 2,$g' /etc/hosts # sed -r '1h; 2,3H; $G' /etc/hosts

(十一)、暫存空間和模式空間互換命令:x

# sed -r '4h; 5x; 6G' /etc/hosts

(十二)、反向選擇:!

# sed -r '3d' /etc/hosts # sed -r '3!d' /etc/hosts

(十三)、多重編輯選項:-e

# sed -r -e '1,3d' -e 's/Hemenway/Jones/' datafile # sed -r '1,3d; s/Hemenway/Jones/' datafile # sed -r '2s/WE/1000phone/g; 2s/Gray/YYY/g' datafile # sed -r '2{s/WE/1000phone/g; s/Gray/YYY/g}' datafile

4、sed常見操做

//刪除配置文件中#號註釋行
sed -ri '/^#/d' file.conf sed -ri '/^[ \t]*#/d' file.conf
//刪除配置文件中//號註釋行 
sed -ri '\Y^[ \t]*//Yd' file.conf
//刪除無內容空行 
sed -ri '/^[ \t]*$/d' file.conf
//刪除註釋行及空行:
# sed -ri '/^[ \t]*#/d; /^[ \t]*$/d' /etc/vsftpd/vsftpd.conf # sed -ri '/^[ \t]*#|^[ \t]*$/d' /etc/vsftpd/vsftpd.conf # sed -ri '/^[ \t]*($|#)/d' /etc/vsftpd/vsftpd.conf
//修改文件:
# sed -ri '$a\chroot_local_user=YES' /etc/vsftpd/vsftpd.conf # sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config # sed -ri '/UseDNS/cUseDNS no' /etc/ssh/sshd_config # sed -ri '/GSSAPIAuthentication/cGSSAPIAuthentication no' /etc/ssh/sshd_config
//給文件行添加註釋:
# sed -r '2,6s/^/#/' a.txt # sed -r '2,6s/(.*)/#\1/' a.txt # sed -r '2,6s/.*/#&/' a.txt   
//&匹配前面查找的內容
# sed -r '3,$ s/^#*/#/' a.txt            //將行首零個或多個#換成一個#
# sed -r '30,50s/^[ \t]*#*/#/' /etc/nginx.conf # sed -r '2,8s/^[ \t#]*/#/' /etc/nginx.conf

sed中使用外部變量

# var1=11111 # sed -ri '3a$var1' /etc/hosts # sed -ri "3a$var1" /etc/hosts # sed -ri 3a$var1 /etc/hosts # sed -ri "$a$var1" /etc/hosts # sed -ri '$a'"$var1" /etc/hosts # sed -ri "\$a$var1" /etc/hosts
相關文章
相關標籤/搜索