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.178linux.com/84677