1.1 流编辑器

功能:增删改查

格式:找谁干啥

1.1.1 增加  cai 

c  replace 替换

a  append 追加

i  insert 插入

[root@oldboyedu50-lnb ~]# sed '3a12306,xiao,UFO' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

12306,xiao,UFO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

12306,xiao.UFO

 

[root@oldboyedu50-lnb ~]# cat  person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

12306,xiao.UFO

[root@oldboyedu50-lnb ~]# sed '3c12306,xiao,UFO' person.txt

101,oldboy,CEO

102,zhangyao,CTO

12306,xiao,UFO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

12306,xiao.UFO

 

 

在文件最后一行增加

12306,xiao,UFO

12580,tao,XO

 

[root@oldboyedu50-lnb ~]# sed  '$a12306,xiao,UFO\n12580,tao,XO' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

12306,xiao.UFO

12306,xiao,UFO

12580,tao,XO

1.1.2 修改配置文件

echo  >>

cat >>oldboy.txt<<EOF

EOF

追加文件最后

sudo         === /etc/sudoers

cron         === /var/spool/cron/

挂载         === /etc/fstab

解析主机名   === /etc/hosts

网卡配置文件 === /etc/sysconfig/network-scripts/ifcfg-eth0

1.1.3 sed命令 删除 d

 #删除第2行到底5行

 #删除从yy开始的行到文件结尾的内容

 #删除包含lidao的行

 #删除不包含lidao的行

[root@oldboyedu50-lnb ~]# sed '/lidao/!d' person.txt

110,lidao,COCO

实例1-1              企业案例:不显示文件中的空行

grep -v '^$'      lidao.txt

sed     '/^$/d'   lidao.txt

awk     '!/^$/'   lidao.txt

sed  -n '/^$/!p'   lidao.txt

实例1-2              不显示文件中的空行,文件中可能有空行 只包含空格的行

egrep -v '^$|^ +$' lidao.txt

oldboy

     oldboy    

lidao  

   lidao

egrep -v "^$|^[ ]+$" lidao.txt  

echo -e 'oldboy\n\n     oldboy     \n     \nlidao   \n   lidao' >lidao.txt

1.1.4 替换 s  substitute

[root@oldboyedu50-lnb ~]# sed 's#[0-9]##g'  person.txt

,oldboy,CEO

,zhangyao,CTO

,Alex,COO

,yy,CFO

,feixue,CIO

,lidao,COCO

,xiao.UFO

[root@oldboyedu50-lnb ~]# sed 's#[0-9]##'  person.txt

01,oldboy,CEO

02,zhangyao,CTO

03,Alex,COO

04,yy,CFO

05,feixue,CIO

10,lidao,COCO

2306,xiao.UFO

[root@oldboyedu50-lnb ~]# sed 's#[0-9]##g'  person.txt

,oldboy,CEO

,zhangyao,CTO

,Alex,COO

,yy,CFO

,feixue,CIO

,lidao,COCO

,xiao.UFO

1.1.5 后向引用

[root@oldboyedu50-lnb ~]# ifconfig eth0 |sed -rn '2s#^.*r:(.*)  Bc.*#\1#gp'

10.0.0.200

 

1.2 ip地址

[root@oldboyedu50-lnb ~]# ifconfig eth0 |sed -rn '2s#^.*r:(.*)  Bc.*#\1#gp'

10.0.0.200

[root@oldboyedu50-lnb ~]# ifconfig eth0 |awk -F'[ :]+'   'NR==2{print $4}'

10.0.0.200

[root@oldboyedu50-lnb ~]# ifconfig eth0 |awk -F'addr:|  Bc'   'NR==2{print $2}'

10.0.0.200

[root@oldboyedu50-lnb ~]# ifconfig eth0 |awk -F'[^0-9.]+'   'NR==2{print $2}'

10.0.0.200

实例1-3              把文件person.txt文件中的每一行的内容 替换为对应的行号

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

12306,xiao.UFO

 

1

2

3

4

5

6

7

实例1-4              批量重命名:删除文件名中的html_

touch oldboy_html_{01..10}.jpg

方法1:sed  拼接

mv  oldboy_html_01.jpg   oldboy_01.jpg

方法2:for循环

for name in `ls /oldboy/name`

do

   mv $name `echo $name |sed 's#html_##g'`

done

方法3:命令 rename

rename oldboy oldgirl        *.jpg

实例1-5              find命令找出包含特殊符号文件名案例

[root@oldboyedu50-lnb /oldboy/name]# find /oldboy -type f -name "*.jpg" -print0 |xargs -0 ls -l

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  01.jpg

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  02.jpg

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  03.jpg

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  04.jpg

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  05.jpg

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  06.jpg

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  07.jpg

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  08.jpg

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  09.jpg

-rw-r--r-- 1 root root 0 Aug 21 11:03 /oldboy/name/oldgirl_  10.jpg

1.3 awk  模式匹配与处理语言

gnu awk gawk

 -F 

-v  定义变量

awk -F: 'NR==1{print $1,$3}' /etc/passwd

        '条件   {

动作}'

         pattern {

命令}

         模式

实例1-6               调换/etc/passwd1列和最后一列内容

 #awk内置变量(shell 环境变量)

#NR 行号 number of record

#NF 每行有多少列 number of filed

#FS 指定的分隔符  -F:    ====  -vFS=:

#$1 $2  1 2

#$0     一整行的内容

#OFS    output 输出分隔符  显示每一列的时候 每一列之间通过什么分开

[root@oldboyedu50-lnb /oldboy]# awk -F: -vOFS=: '{print $NF,$2,$3,$4,$5,$6,$1}' passwd.txt

/bin/bash:x:0:0:hahaha:/root:root

/sbin/nologin:x:1:1:bin:/bin:bin

/sbin/nologin:x:2:2:daemon:/sbin:daemon

/sbin/nologin:x:3:4:adm:/var/adm:adm

/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp

/bin/sync:x:5:0:sync:/sbin:sync

/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown

/sbin/halt:x:7:0:halt:/sbin:halt

/sbin/nologin:x:8:12:mail:/var/spool/mail:mail

/sbin/nologin:x:10:14:uucp:/var/spool/uucp:uucp

 

 [root@oldboyedu50-lnb /oldboy]# awk -F: -vOFS=:  '{tmp=$1;$1=$NF;$NF=tmp;print}' passwd.txt

/bin/bash:x:0:0:hahaha:/root:root

/sbin/nologin:x:1:1:bin:/bin:bin

/sbin/nologin:x:2:2:daemon:/sbin:daemon

/sbin/nologin:x:3:4:adm:/var/adm:adm

/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp

/bin/sync:x:5:0:sync:/sbin:sync

/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown

/sbin/halt:x:7:0:halt:/sbin:halt

/sbin/nologin:x:8:12:mail:/var/spool/mail:mail

/sbin/nologin:x:10:14:uucp:/var/spool/uucp:uucp