第一章
sed
-i 插入内容,插入第几行就在第几行
[root@shizhenghao ~]# sed '1i 1' 1.txt
1
PROXY_METHOD=none
-a 在下一行追加内容
[root@shizhenghao ~]# sed '1a 3' 1.txt
PROXY_METHOD=none
3
用\n ,可追加行数,\n是分隔行的意思
[root@shizhenghao ~]# sed '1a 3\na' 1.txt
PROXY_METHOD=none
3
a
删除第一行内容
[root@shizhenghao ~]# sed -i '1d' 1.txt
方法:要取一个目标,删除两边的目标,就得到了结果
[root@shizhenghao ~]# stat /etc/hosts
文件:"/etc/hosts"
大小:158 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:16793700 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2019-03-19 17:00:27.047999935 +0800
最近更改:2013-06-07 22:31:32.000000000 +0800
最近改动:2019-02-28 01:44:52.916008285 +0800
创建时间:-
[root@shizhenghao ~]# stat /etc/hosts|sed -rn 's#^.*\(0(.*)/-rw.*$#\1#gp'
644
第二章
awk
awk 是命令行操作也可以作为编程语言,处理字符串
三剑客自身有特长的:
grep 过滤查找内容。筛子
sed 取行,替换,删除,追加
awk 取列
awk语法
awk 参数 '条件 动作‘ 文件
参数 :-F
空格 是默认分隔符
cut 按列切割
-d 指定分隔符
-f 指定哪列,多列用逗号,
[root@shizhenghao ~]# cat zh.txt
1 2 3 4 5 6 7 8 9
[root@shizhenghao ~]# cut -d" " -f1,3 zh.txt
1 3
[root@shizhenghao ~]# cut -d" " -f1-3 zh.txt
1 2 3
-c 按字符取内容
[root@shizhenghao ~]# cat b.txt
oldboy 49000448
[root@shizhenghao ~]# cut -c1-6,8-10 b.txt
oldboy490
-F 指定分隔符
[root@shizhenghao ~]# awk -F ":" '{print $3,$5}' 5.txt
0 root
1 bin
2 daemon
3 adm
4 lp
列:$1第一列 $2 第二列 ....
$0 整行
$NF 最后一列,倒数第一列
$(NF-1)倒数第二列
练习打印 1 3 和最后一列:
[root@shizhenghao ~]# awk -F ":" '{print $1,$3,$NF}' 5.txt
root 0 /bin/bash
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
adm 3 /sbin/nologin
lp 4 /sbin/nologin
NR 行号
问题:取5.txt文件的第二行到第三行的内容。
[root@shizhenghao ~]# awk 'NR>1&&NR<4' 5.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@shizhenghao ~]# awk 'NR==2,NR==3' 5.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
过滤出含有root字符串的行:
[root@shizhenghao ~]# awk '/root/' 5.txt
root:x:0:0:root:/root:/bin/bash
删除含有root字符串的行:
[root@shizhenghao ~]# awk '/^[^r]/' 5.txt
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
【^r】非r
^【^r】以非r字符开头
取文件的1,3,和最后一列
[root@shizhenghao ~]# awk -F ":" '{print NR,$1,$3,$NF}' 5.txt
1 root 0 /bin/bash
2 bin 1 /sbin/nologin
3 daemon 2 /sbin/nologin
4 adm 3 /sbin/nologin
5 lp 4 /sbin/nologin
取linux系统中的ip地址:
[root@shizhenghao ~]# ifconfig eth0|awk 'NR==2{print $2}'
10.0.0.101