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/passwd第1列和最后一列内容
#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