sed命令
sed是一種流編輯器,用于對文本逐行讀取逐行處理,處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(patternspace),接著用sed命令處理緩沖區中的內容,處理完成后,把處理后結果輸出到標準輸出。接著處理下一行,這樣不斷重復,直到文件末尾。
命令語法
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
script:
地址定界編輯命令
常用選項:
-n 不輸出模式空間中內容至屏幕
[root@xulinhai tmp]# sed -n '1,3p' fstab
# /etc/fstab`
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
-e script, --expression=script 多點編輯
[root@xulinhai tmp]# sed -n -e '1,3p' -e '5,6p' fstab
# /etc/fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
-f /PATH/TO/SED_SCRIPT_FILE
把sed要執行的命令寫到文件中,通過-f選項把文件中的命令傳給sed
-r, --regexp-extended 支持使用擴展正則表達式
-i 直接編輯源文件
地址定界
1,空地址:對全文進行處理
2,單地址
#:對指定行進行操作
[root@xulinhai tmp]# sed -n '2p' fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
/pattern/:被模式匹配到的每一行
[root@xulinhai tmp]# sed -n '/UUID/p' fstab
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
3,地址范圍
#,# :起始行到結束行
[root@xulinhai tmp]# sed -n '3,5p' fstab
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#,+n 起始行#往后加n行
[root@xulinhai tmp]# sed -n '3,+5p' fstab
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
#,/pattern/ 從起始行#開始到pattern匹配到的行
[root@xulinhai tmp]# sed -n '1,/UUID/p' fstab
# /etc/fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
/pattern1/,/pattern2/ 從pattern1匹配到的行到pattern2匹配到的行
[root@xulinhai tmp]# sed -n '/anaconda/,/UUID/p' fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
4,步進:~
1~2 所有奇數行
[root@xulinhai tmp]# sed -n '1~2p' fstab
# /etc/fstab
#
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
/dev/mapper/vg_root-lv_swap swap swap defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
proc /proc proc defaults 0 0
/dev/vg_app/lv_template /template ext4 defaults 0 0
2~2 所有偶數行
[root@xulinhai tmp]# sed -n '2~2p' fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
# Accessible filesystems, by reference, are maintained under '/dev/disk'
#
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
#10.240.253.21:/hpetl /hpetl nfs defaults 0 0
編輯命令:
d 刪除
sed '1,5d' /tmp/fstab
sed '/^UUID/d' /etc/fstab
sed '1~2d' /etc/fstab 刪除奇數行,顯示偶數行
p 打印
sed '1~2p' /etc/fstab 奇數行顯示兩遍
sed -n '1~2p' /etc/fstab
a\text 在匹配到的行的下方追加文本‘text’ ,支持使用\n多行插入.
[root@xulinhai tmp]# sed '/UUID/a\this is a new line.\nthis is another line.' fstab
# /etc/fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
this is a new line.
this is another line.
/dev/mapper/vg_root-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
#10.240.253.21:/hpetl /hpetl nfs defaults 0 0
/dev/vg_app/lv_template /template ext4 defaults 0 0
i\text 在行的上方追加文本‘text’支持使用\n多行插入
[root@xulinhai tmp]# sed '/UUID/i\this is a new line.\nthis is another line.' fstab
# /etc/fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
this is a new line.
this is another line.
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
/dev/mapper/vg_root-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
#10.240.253.21:/hpetl /hpetl nfs defaults 0 0
/dev/vg_app/lv_template /template ext4 defaults 0 0
c\text 把匹配到的行整行替換為text
[root@xulinhai tmp]# sed '2c\this is a new line.' fstab
# /etc/fstab
this is a new line.
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
/dev/mapper/vg_root-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
#10.240.253.21:/hpetl /hpetl nfs defaults 0 0
/dev/vg_app/lv_template /template ext4 defaults 0 0
w/path/to/somefile 把匹配到的行寫入到指定文件中
[root@xulinhai tmp]# sed '/^[^#]/w/tmp/newfstab' fstab
[root@xulinhai tmp]# cat newfstab
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
/dev/mapper/vg_root-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/vg_app/lv_template /template ext4 defaults 0 0
r/path/from/somefile 讀取指定文件中內容至當前文件被模式匹配到的下一行
[root@xulinhai tmp]# cat newfstab
this is a new line
[root@xulinhai tmp]# sed '/proc/r/tmp/newfstab' fstab
# /etc/fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
/dev/mapper/vg_root-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
this is a new line
#10.240.253.21:/hpetl /hpetl nfs defaults 0 0
/dev/vg_app/lv_template /template ext4 defaults 0 0
= 為模式匹配到的行打印行號
[root@xulinhai tmp]# sed '/^\//=' fstab #為斜線開頭的行打印行號
# /etc/fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
7
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
9
/dev/mapper/vg_root-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
#10.240.253.21:/hpetl /hpetl nfs defaults 0 0
15
/dev/vg_app/lv_template /template ext4 defaults 0 0
!條件取反
[root@xulinhai tmp]# sed -n '/^#/!p' fstab #打印非#開頭的行
/dev/mapper/vg_root-lv_root / ext4 defaults 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 defaults 1 2
/dev/mapper/vg_root-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/vg_app/lv_template /template ext4 defaults 0 0
You have mail in /var/spool/mail/root
s/// 查找替換 其分隔符可自行指定 如:s@@@, s###
g 全局替換
[root@xulinhai tmp]# sed 's/defaults/DEFAULTS/g' fstab
# /etc/fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_root-lv_root / ext4 DEFAULTS 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 DEFAULTS 1 2
/dev/mapper/vg_root-lv_swap swap swap DEFAULTS 0 0
tmpfs /dev/shm tmpfs DEFAULTS 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs DEFAULTS 0 0
proc /proc proc DEFAULTS 0 0
#10.240.253.21:/hpetl /hpetl nfs DEFAULTS 0 0
/dev/vg_app/lv_template /template ext4 DEFAULTS 0 0
w/path/to/somefile 將替換成功的結果保存至指定文件
sed 's/defaults/DEFAULTS/gw/tmp/defaults' fstab #替換defaults為DEFAULTS 并保存至/tmp/defaults文件中
[root@xulinhai tmp]# cat defaults
/dev/mapper/vg_root-lv_root / ext4 DEFAULTS 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 DEFAULTS 1 2
/dev/mapper/vg_root-lv_swap swap swap DEFAULTS 0 0
tmpfs /dev/shm tmpfs DEFAULTS 0 0
sysfs /sys sysfs DEFAULTS 0 0
proc /proc proc DEFAULTS 0 0
#10.240.253.21:/hpetl /hpetl nfs DEFAULTS 0 0
/dev/vg_app/lv_template /template ext4 DEFAULTS 0 0
[root@xulinhai tmp]# sed -i 's/defaults/DEFAULTS/g' fstab #直接替換源文件中的defaults為DEFAULTS
[root@xulinhai tmp]# cat fstab
# /etc/fstab
# Created by anaconda on Wed Mar 22 23:57:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_root-lv_root / ext4 DEFAULTS 1 1
UUID=b13a9a42-536e-4e57-aed0-24af0c7d450e /boot ext4 DEFAULTS 1 2
/dev/mapper/vg_root-lv_swap swap swap DEFAULTS 0 0
tmpfs /dev/shm tmpfs DEFAULTS 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs DEFAULTS 0 0
proc /proc proc DEFAULTS 0 0
#10.240.253.21:/hpetl /hpetl nfs DEFAULTS 0 0
/dev/vg_app/lv_template /template ext4 DEFAULTS 0 0
p 顯示替換成功的行
高級編輯命令
h 把模式空間中的內容覆蓋至保持空間中
H 把模式空間中的內容追加至保持空間中
g 把保持空間中的內容覆蓋至模式空間中
G 把保持空間中的內容追加至模式空間中
x 把模式空間中的內容與保持空間中的內容互換
n 覆蓋讀取匹配到的行的下一行至模式空間中
N 追加讀取匹配到的行的下一行至模式空間中
d 刪除模式空間中的行
D 刪除多行模式空間中的所有行
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/100951