linux 文本三剑客之sed编辑器
一、Sed編輯器
1、Sed概述
? ? ? ? ? ?sed編輯器時一種流編輯器,流編輯器會在編輯器處理數據之前基于預先提供的一組規則來編輯數據流。
? ? ? ? ? ?sed編輯器可以根據命令來處理數據流中的數據,這些命令要么從命令行中輸入,要存儲在一個命令文本文件中。
2、Sed工作流程
? ? ? ? ? sed 的工作流程主要包括讀取、執行和顯示三個過程: 讀取:sed 從輸入流(文件、管道、標準輸入)中讀取一行內容并存儲到臨時的緩沖區中(又稱模式空間,pattern space)。 執行:默認情況下,所有的sed 命令都在模式空間中順序地執行,除非指定了行的地址,否則sed 命令 將會在所有的行上依次執行。 顯示font>:發送修改后的內容到輸出流。在發送數據后,模式空間將會被清空。
PS:默認情況下所有的sed命令都是在模式空間內執行的,因此輸入的文件并不會發生任何變化,除非是用重定向存儲輸出。?
3、Sed基本用法
sed -e '操作' 文件1 文件2
?
sed -n -e '操作' 文件1 文件2?
?
sed -f 腳本文件 文件1 文件2?
?
sed -i -e '操作' 文件1 文件2
4、Sed常用選項
-
-e 或 - -expression=∶ 多點編輯
-
-f 或- -file=∶表示用指定的腳本文件來處理輸入的文本文件。
-
-h 或- -help∶顯示幫助。
-
-n∶ 不輸出模式空間內容到屏幕,即不自動打印,加p,又恢復自動打印
-
-i∶ 備份文件文件并原處編輯
-
-r:使用擴展正則表達式
5,sed命令的常用操作
-
s∶替換,替換指定字符。
-
d∶刪除,刪除選定的行。
-
a∶?增加,在當前行下面增加一行指定內容。
-
i∶?插入,在選定行上面插入一行指定內容。
-
c∶?替換,將選定行替換為指定內容。
-
Y∶?字符轉換,轉換前后的字符長度必須相同。
-
p∶?打印,如果同時指定行,表示打印指定行;如果不指定行,則表示打印所有內容; 如果有非打印字符,則以 AscII碼輸出。其通常與_n"選項一起使用。
-
=∶打印行號。
-
l(小寫L)∶打印數據流中的文本和不可打印的ASCII字符(比如結束符s、制表
二、Sed命令使用
1打印內容
sed ‘ ’交互模式輸入一行,自動打印一行相同的
sed -n ‘ ’ 交互模式輸入一行,關閉自動打印
sed -n ‘ p’加上p又恢復自動打印
2:查看文件,打印全部內容
#法一:
[root@yxp opt]#sed ' ' /etc/fstab?
?
#
# /etc/fstab
# Created by anaconda on Sat Sep ?4 02:48:23 2021
#
# 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/centos-root / ? ? ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0
UUID=183ca7c7-1989-4f43-9e81-d2676192f5a4 /boot ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0
/dev/mapper/centos-home /home ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0
/dev/mapper/centos-swap swap ? ? ? ? ? ? ? ? ? ?swap ? ?defaults ? ? ? ?0 0
/dev/sdb1 /mnt xfs defaults 0 0
?
#法二
[root@yxp opt]#sed -n ' p' /etc/fstab?
?
#
# /etc/fstab
# Created by anaconda on Sat Sep ?4 02:48:23 2021
#
# 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/centos-root / ? ? ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0
UUID=183ca7c7-1989-4f43-9e81-d2676192f5a4 /boot ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0
/dev/mapper/centos-home /home ? ? ? ? ? ? ? ? ? xfs ? ? defaults ? ? ? ?0 0
/dev/mapper/centos-swap swap ? ? ? ? ? ? ? ? ? ?swap ? ?defaults ? ? ? ?0 0
/dev/sdb1 /mnt xfs defaults 0 0
3:打印指定行內容
##例如:打印第四行內容
[root@yxp opt]#sed -n ' 4p' /etc/fstab?
# Created by anaconda on Sat Sep ?4 02:48:23 2021
?
[root@yxp opt]#ifconfig ens33|sed -n '2p'
? ? ? ? inet 192.168.59.102 ?netmask 255.255.255.0 ?broadcast 192.168.59.255
4:根據地址,打印指定多行內容
#打印2-4行
[root@yxp opt]#ifconfig ens33|sed -n '2,4p'
? ? ? ? inet 192.168.59.102 ?netmask 255.255.255.0 ?broadcast 192.168.59.255
? ? ? ? inet6 fe80::ecee:9f8a:52de:5871 ?prefixlen 64 ?scopeid 0x20<link>
? ? ? ? ether 00:0c:29:3e:22:fe ?txqueuelen 1000 ?(Ethernet)
?
#打印2行加4行,就是打印第二行到第6行
[root@yxp opt]#cat -n /etc/passwd|sed -n '2,+4p'
? ? ?2?? ?bin:x:1:1:bin:/bin:/sbin/nologin
? ? ?3?? ?daemon:x:2:2:daemon:/sbin:/sbin/nologin
? ? ?4?? ?adm:x:3:4:adm:/var/adm:/sbin/nologin
? ? ?5?? ?lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
? ? ?6?? ?sync:x:5:0:sync:/sbin:/bin/sync
5:打印多行后退出
[root@yxp opt]#sed ?'3q' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
6:打印最后一行,使用通配符$
[root@yxp opt]#sed -n '$p' /etc/passwd
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
7:支持正則表達式
#查找基本格式:
sed -n '//,//p' 文件名
第一個//表示開頭位置,第二個//表示結尾位置
[root@yxp opt]#sed -n '/^r/,/^f/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
yxp:x:1000:1000:yxp:/home/yxp:/bin/bash
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
8:過濾關鍵字
[root@yxp opt]#sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
9:‘#,/關鍵字/p’ 從第#行開始匹配
[root@yxp opt]#sed -n '2,/root/p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
10:‘/關鍵字/,#’ 找到第#個關鍵字為止
[root@yxp opt]#sed -n '/root/,3p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
11:?打印文本的奇數和偶數行。
[root@yxp opt]#seq 10 |sed -n '1~2p'
1
3
5
7
9
[root@yxp opt]#seq 10 |sed -n '2~2p'
2
4
6
8
10
[root@yxp opt]#seq 10 |sed ?'1~2d'
2
4
6
8
10
[root@yxp opt]#seq 10 |sed ?'2~2d'
1
3
5
7
9
?
總結
以上是生活随笔為你收集整理的linux 文本三剑客之sed编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R实战| PCA、tSNE、UMAP三种
- 下一篇: 娱乐工作两不误 在Linux下如何安装Q