三剑客之一sed命令

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

(0)
charlestcharlest
上一篇 2017-08-13
下一篇 2017-08-13

相关推荐

  • N25-第九周博客作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # 统计登录用户和非登陆用户的个数 # author: han declare -i loginnum=0 declare -i nologinnum=0 whil…

    Linux干货 2017-02-24
  • Docker 之初次体验

    一、Docker 简介  lxc linux container,openvz  容器中各虚拟机只有一个内核,而是多个用户空间  在库中完成虚拟化,比如wine 或者在windows中运行bash  在应用程序的运行级别提供虚拟化,比如jvm   pstree , pid 为1 的进程  …

    Linux干货 2015-01-16
  • 0805linux基础小记(正则匹配)

    cat -ns file   //-s,压缩重复的空行 cat -T f1  //看到tab键 cat f1|tr '\t' '\r' > f2 cat -v f2 //看到^M   tac file //倒的显示 rev file //反向显示每一行 echo {1..10} &g…

    Linux干货 2016-08-07
  • jenkins+gitlab构建安卓自动编译环境

        因工作关系接触到接触到安卓自动编译环境,网上的资料都推荐了jenkins,因为第一次接触安卓和jenkins,踩了不少的坑,有总结才有进步。    gitlab环境之前已经安装完成可用,具体步骤另外详解吧。本例目标是在gitlab可用前提下,通过jenkins将git仓库的代码自行编译打包,生成可用的apk安装…

    Linux干货 2016-07-16
  • bash脚本之数组及字符串切片,登陆配置文件

    一,概述 数组(就是一堆变量的集合) 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合/ 数组名和索引     索引:编号从0开始,属于数值索引     注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后…

    Linux干货 2016-09-01