sed
sed ‘2p’ /etc/passwd
打印paswwd的第二行
這樣執行結果看能看出第二行顯示兩次
sed -n ‘2p’ /etc/passwd
-n 執行后 會取出當前行顯示. n是關閉打印
例如
[root@cent7 ~]#ifconfig ens33|sed -n ‘2p’
顯示出 網卡配置的 第二行
sed ‘/pattern/’ :被此模式所匹配到的每一行
例如
ifconfig ens33|sed -n ‘/netmask/p’
執行結果同上面指令一樣 都是顯示 ens33 ‘/,.,.,.,/’ 這里面試匹配字符,匹配到就會顯示全行
sed -n ‘/^UUID/p’ /etc/fstab
這條命令 在目錄/etc/fstab下,顯示出以UUID為行首的 行 ^突字符是錨定行首,在grep里也有用到 注意后面要接p -n是關閉打印 p是打印
[root@cent7 ~]#sed -n ‘2,10p’ /etc/passwd #’2,10p’的意思為在 /etc/passwd 顯示 從第二行開始到第10行 注意用法 ‘2,10p’
sed -n ‘2,+10p’ /etc/passwd #從第二行開始 往后加10行顯示
[root@cent7 ~]#sed -n ‘/^b/,/^f/p’ /etc/passwd # 以b開頭 f結尾的 字段 顯示 ,如果第一段截取完成還有b開頭就繼續執行顯示
[root@cent7 ~]#sed -n ‘/^b/,10p’ /etc/passwd # b開頭,數到第10行,這個第十行 是 整個文件的第十行.要注意概念
[root@cent7 ~]#sed -n ’10,/^b/p’ /etc/passwd #從整個文件的第十行 到 第一個b開頭的行,
cp /etc/passwd f9 把文件復制了
sed -n ‘1~2p’ f9 打印出 奇數行
[root@cent7 ~]#seq 10 |sed -n ‘1~2p’ 打印出奇數行 可以理解為 打印第一行,然后每隔兩行打印 一直到10結束
1
3
5
7
9
[root@cent7 ~]#seq 10 |sed -n ‘2~2p’ 打印偶數行 可以理解為 打印第二行,然后每隔兩行打印 一直到10結束
2
4
6
8
10
[root@centos6 ~]#seq 11 |sed ‘1~2d’ 刪除奇數行
2
4
6
8
10
[root@centos6 ~]#seq 11 |sed ‘2~2d’ 刪除偶數行
1
3
5
7
9
11
[root@centos6 ~]#seq 11 |sed ‘axyz’ #a選項是追加 從第一行后面開始追加
1
xyz
2
xyz
3
xyz
4
xyz
5
xyz
6
xyz
7
xyz
8
xyz
9
xyz
10
xyz
11
xyz
[root@centos6 ~]#seq 11 |sed -n ‘axyz’ 如果加上 -n 選項會顯示出 11個xyz
xyz
xyz
xyz
xyz
xyz
xyz
xyz
xyz
xyz
xyz
xyz
[root@centos6 ~]#seq 11 |sed ‘6axyz’ #第六行追加xyz
1
2
3
4
5
6
xyz
7
8
9
10
11
[root@centos6 ~]#seq 11 |sed ‘6,9axyz’ #6-9行追加xyz
1
2
3
4
5
6
xyz
7
xyz
8
xyz
9
xyz
10
11
[root@centos6 ~]#seq 11 |sed ‘6~2axyz’ #從第6行開始 每隔兩行追加xyz
1
2
3
4
5
6
xyz
7
8
xyz
9
10
xyz
11
[root@centos6 ~]#seq 11 |sed ‘a\ xyz’ a后面加上\空格 顯示為以下 界面
1
xyz
2
xyz
3
xyz
4
xyz
5
xyz
6
xyz
7
xyz
8
xyz
9
xyz
10
xyz
11
xyz
[root@centos6 ~]#seq 11 |sed ‘a========’ a后面加上符號,顯示如下
1
========
2
========
3
========
4
========
5
========
6
========
7
========
8
========
9
========
10
========
11
========
[root@centos6 ~]#seq 11 |sed ‘a===\n—\n+++’ #\n 顯示為空格,以下以此類推.
1
===
—
+++
2
===
—
+++
3
===
—
+++
4
===
—
+++
5
===
—
+++
6
===
—
+++
7
===
—
+++
8
===
—
+++
9
===
—
+++
10
===
—
+++
11
===
—
+++
[root@centos6 ~]#seq 11 |sed ’10a#jdsfaljkshd’ # #號代表你想往后加的字符 此時只是顯示不保存
1
2
3
4
5
6
7
8
9
10
jdsfaljkshd
11
[root@centos6 ~]#sed -i ’10a#jdsfaljkshd’ p #p為 /etc/passwd復制的文件 -i 為顯示并更改文件,此命令的執行結果為:
在第十行的下面加上jdsfalijkshd,第十一行顯示jdsfalijkshd.
[root@centos6 ~]#sed -i ’10d’ p #10d 刪除第十行. -i并更改文件 (比較危險)
[root@centos6 ~]#sed -i.bak ’10d’ p #為了安全起見,-i后面跟.bak 隨便起個文件后綴,執行完結果后會輸出到 p.bak下 以免誤操作.
[root@centos6 ~]#sed -i ‘/^b/d’ p #刪除已b開頭的行 并更改保存文件,^突字符已經提到很多次了是錨定行首!已經記住了
[root@centos6 ~]#sed -i ‘/bash$/d’ p^C #刪除取消bash結尾的行,并且保存文件.
[root@centos6 ~]#sed -i ‘/bash$/!d’ p #刪除 除了bash結尾的行,并且保存文件. !是取反, 注意位置,要跟在/bash$/后面
[root@centos6 ~]#sed -i ‘/^# Source/ialias yy=”yum -y install”‘ .bashrc #次命令為增加定義別名的文件. 首先^ # Soucre 錨定這個行首 然后 i 這里的i
是 在此行的上一行打印出 后面的文字. .bashrc為 alias的文件
[root@centos6 ~]#seq 10 |sed ‘6c66’ #c為替換
1
2
3
4
5
66
7
8
9
10
[root@centos6 ~]#seq 10 |sed ‘/^6/c66’ #也可以用錨定行首的方法 用c替代
1
2
3
4
5
66
7
8
9
10
[root@centos6 ~]#sed ‘/^SELINUX=/cSELINUX=disabled’ /etc/selinux/config # 也可以這樣顯示.
[root@centos6 ~]#seq 10 |sed ‘5,8w /app/sed.log’ #此命令顯示為 10個數 的 5-8行 取出 并保存到 app目錄下的 sed.log文件中
[root@centos6 ~]#seq 10 |sed ‘5,8r /etc/issue’ #顯示為第5-第8行 下依次寫出這個文件
1
2
3
4
5
CentOS release 6.9 (Final)
Kernel \r on an \m
\l
\t
\n
6
CentOS release 6.9 (Final)
Kernel \r on an \m
\l
\t
\n
7
CentOS release 6.9 (Final)
Kernel \r on an \m
\l
\t
\n
8
CentOS release 6.9 (Final)
Kernel \r on an \m
\l
\t
\n
9
10
[root@centos6 ~]#cat -n p |sed ‘/root/=’ #顯示文件中帶有root的行 是第幾行
1
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
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
11
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
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/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
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
god:x:500:500::/home/god:/bin/bash
wenwen:x:501:501::/home/wenwen:/bin/bash
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1001:502::/home/user2:/bin/bash
user3:x:1002:1002::/home/user3:/bin/bash
user4:x:1003:1003:tony:/home/black:/bin/bash
user5:x:1004:1004::/home/user5:/sbin/nologin
bash:x:1005:1005::/home/bash:/bin/bash
testbash:x:1006:1006::/home/testbash:/bin/bash
sh:x:1007:1007::/home/sh:/bin/bash
basher:x:1008:1008::/home/basher:/bin/bash
nologin:x:1009:1009::/home/nologin:/bin/bash
[root@centos6 ~]#cat -n p1
cat: p1: No such file or directory
[root@centos6 ~]#cat p1 |sed ‘/^root\>/s/root/spuerman/g’ #root 為行首的 所有root改成superman
[root@centos6 ~]#sed ‘/^#/d’ /etc/fstab # 刪除 每行以#開頭的行
[root@centos6 ~]#sed -e ‘/^#/d’ -e ‘/^$/d’ /etc/fstab #刪除每行以#號開頭 和 空行的行 ^$加在一起就是空行
UUID=3a425859-c097-4617-90dd-803620502d32 / ext4 defaults 1 1
UUID=478650fe-0d04-43ef-b21d-3caba486738f /app ext4 defaults 1 2
UUID=e677ae41-dcb6-41d1-8e7a-f3a7d321c952 /boot ext4 defaults 1 2
UUID=a5ef8c9b-30d0-4d96-9e45-4dcfbb238d22 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 default
可以利用上面的命令寫成 vim /^$/d 作為調用 比如存成sed.txt
然后 用sed命令 sed -f sed.txt /etc/fstab
-f 是調用這個腳本 文件顯示出 去掉空白行的所有行
sed ‘s/xfs/ext4/’ /etc/fstab # 搜索替代 格式為s/// s@@@
cdnet
sed ‘s/BOOTPROTO=dhcp/BOOTPROTO=none/’ ifcfg-ens33 #替換文件中的單詞
sed -e s’/dhcp/static/’ -e ‘/BOOTPROTO=dhcp/BOOTPROTO=none/a\IPADDR=192.168.2.1’ ifcfg-ens33 # -a是添加下一行
[root@centos6 ~]#ifconfig eth0 |sed -n ‘2p’ |sed ‘s/^.r://’|sed ‘s/ $//’ # 此命令顯示 第二行打印 然后行首錨定到r: 錨定行尾 行為前是空格
192.168.174.166 Bcast:192.168.174.255 Mask:255.255.255.0
[root@centos6 ~]#ifconfig eth0 |sed -n ‘2p’ |sed ‘s/^.r://’|sed ‘s/ .$//’ # 此命令顯示 第二行打印 然后行首錨定到r: 錨定行尾 行為前是空格
[root@cent7 ~]#ifconfig ens33 |sed -n -e ‘2s/.et //’ -e ‘2s/ .$//p’ #centos7下的查詢ip 第二行搜索 et 空格 -e
192.168.65.131
[root@cent7 ~]#ifconfig ens33 |sed ‘2!d;s/.et //;s/ .$//’ #保留第二行 其它行刪除 在第二行搜索 et 空格
192.168.65.131
[root@cent7 ~]#sed ‘s/bash$/basher/’ /etc/passwd # 替換bash結尾成basher
[root@cent7 ~]#sed -r ‘s/bash$/&er/’ /etc/passwd # 同上 &符是 替代
[root@cent7 ~]# seq 10|sed -n ‘n;p’ #打印偶數行 原理是 第一行的1因為 -n選項不打印 ,2覆蓋1 是n; 打印出2 是p
2
4
6
8
10
[root@cent7 ~]# seq 10|sed ‘n;p’ #偶數行打印兩次
1
2
2
3
4
4
5
6
6
7
8
8
9
10
10
[root@cent7 ~]# seq 10|sed ‘1!G;h;$!d’ #顯示第1行,!G不是第1行執行G ;h把模式空間中的內容追加至保持空間中;$!d 不是行尾就刪除
10
9
8
7
6
5
4
3
2
1
[root@cent7 ~]# seq 10|sed ‘N;D’ #顯示最后一行
10
[root@cent7 ~]# seq 11|sed ‘$!N;$!D’ #顯示最后兩行
10
11
[root@cent7 ~]# seq 12|sed ‘$!N;$!D’ #顯示最后兩行
11
12
[root@cent7 ~]# seq 2|sed ‘$!d’ #顯示最后一行
2
[root@cent7 ~]# seq 12|sed ‘$!d’
12
[root@cent7 ~]# seq 12|sed ‘G’ #每一行后面顯示空行
1
2
3
4
5
6
7
8
9
10
11
12
[root@cent7 ~]# seq 11|sed ‘g’ #顯示11個空行
[root@cent7 ~]# seq 11|sed ‘/^$/d;G’ 每行后面顯示空行
1
2
3
4
5
6
7
8
9
10
11
[root@cent7 ~]# seq 11|sed ‘n;d’ #顯示奇數行
1
3
5
7
9
11
[root@cent7 ~]# seq 11|sed -n ‘1!G;h;$p’ #倒敘顯示
11
10
9
8
7
6
5
4
3
2
1
例子
[root@cent7 ~]#echo /etc/sysconfig/-network-scripts/ 顯示例子
/etc/sysconfig/-network-scripts/
[root@cent7 ~]#echo /etc/sysconfig/-network-scripts/ |sed -r ‘s@^(./)([^/]+/?)@\1@’ #’s@^(./)代表/etc/sysconfig/ ([^/]+/?)@\1@代表-network-scripts/ 取目錄名
/etc/sysconfig/
[root@cent7 ~]#echo /etc/sysconfig/-network-scripts/ |sed -r ‘s@^(./)([^/]+/?)@\2@’ ##’s@^(.*/)代表/etc/sysconfig/ ([^/]+/?)@\2@代表-network-scripts/ 取基名
-network-scripts/
root@cent7 ~]#cat /etc/init.d/functions |tr -c “[:alpha:] \n” ” “|tr -s ” ” “\n”|sort|uniq -c|sort -nr
[root@cent7 ~]#nl f1|sed -n “N;s/\n//p”
原創文章,作者:charlest,如若轉載,請注明出處:http://www.www58058.com/84677