文章目录
三剑客的扩展与总结
- grep #过滤 给过滤出来的内容加上颜色
选项:
-n #给过滤出来的内容加上此行所在文件的行号
-i #忽略大小写
-c #统计的是行数 包含过滤字符串的行数
-v #排除 删除 取反
-o #只显示过滤出来的内容
-w #精确匹配 只匹配你要过滤的字符串,而不是过滤包含此字符串的字符串
-r #递归过滤 过滤多个文件 针对目录操作
-A #匹配过滤出来的内容向下多少行 后面加正整数
-B #匹配过滤出来的内容向上多少行
-C #匹配过滤出来的内容各向上向下多少行
-E #支持扩展正则使用 === egrep
^ #以什么开头
$ #以什么为结尾
^$ #空行 排除存在空格或者tab键的空行
. #匹配除换行符以外的任意一个字符
* #匹配前面的字符出现0次或者0次以上
.* #所有
| #或者 扩展正则
``` `
- sed #擅长替换 增删改查 后向引用
选项:
-n #取消默认输出
-r #支持扩展正则
-i #真正的改变文件内容
-e #允许多项编辑 了解
内部命令:
p #打印
d #删除 排除 取反
s #替换
g #全局
i #忽略大小写
a #追加
i #插入
\n #换行符
\t #tab键
= #显示行号
后向引用:
[root@qls ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 19648 bytes 2074525 (1.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13896 bytes 1420434 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@qls ~]# ifconfig eth0 | sed -n '3p' | sed -r 's#(.*6 )(.*)( pr.*)#\2#g'
fe80::3310:9d15:9ee4:43e8
[root@qls ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 19930 bytes 2100423 (2.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14078 bytes 1441164 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@qls ~]# ifconfig eth0 | sed -n '2p'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@qls ~]# ifconfig eth0 | sed -n '2p' | sed -r 's#(^.*et )(.*)( n.*$)#\2#g'
10.0.0.100
[root@qls ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@qls ~]# ip a s eth0 | sed -n '3p'|sed -r 's#(^.*t )(.*)(/.*)#\2#g'
10.0.0.100
灵活 思路 方法
[root@qls ~]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 67125348 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:net_conf_t:s0
Access: 2020-07-14 17:30:04.678582732 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2020-07-06 02:13:36.028996182 +0800
Birth: -
[root@qls ~]# stat /etc/hosts | sed -nr '4s#.*: \((.*)/.*#\1#gp'
0
[root@qls ~]# stat /etc/hosts | sed -nr '4s#.*: \((.*)/-r.*#\1#gp'
0644
[root@qls ~]# stat /etc/hosts | sed -nr '4s#.*\((.*)/-r.*#\1#gp'
0644
多种方法 多种选择
- awk #擅长取列
选项:
-F #指定分隔符 默认的为空白字符为分隔符 FS
-v #指定内部变量
! #取反 排除
内部变量:
FS #指定输入分隔符
OFS #指定输出分隔符
NR #行号
NF #最后一列
$NF #显示最后一列
$0 #完整的一行内容
$n #n数字 指定取出的某一列
了解
1. 排除空行 存在空格和tab键的空行
[root@qls ~]# cat sshd_config
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 22
#AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::
[root@qls ~]# grep -v '^$' sshd_config
[root@qls ~]# sed '/^$/d' sshd_config
[root@qls ~]# awk '!/^$/' sshd_config
# -P 支持tab键
[root@qls ~]# grep -Pv '^[ \t]*$' sshd_config
[root@qls ~]# sed '/^[ \t]*$/d' sshd_config
[root@qls ~]# awk '!/^[ \t]*$/' sshd_config
# \s 空白字符
[root@qls ~]# grep -v '^\s*$' sshd_config
[root@qls ~]# sed '/^\s*$/d' sshd_config
[root@qls ~]# awk '!/^\s*$/' sshd_config
``
2. 排除空行和注释行 #号开头的
[root@qls ~]# grep -Ev '^$|^#' sshd_config
[root@qls ~]# grep -Ev '^\s*$|^#' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@qls ~]# sed -r '/^\s*$|^#/d' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@qls ~]# sed -r '/^[ \t]*$|^#/d' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@qls ~]# awk '!/^[ \t]*$|^#/' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@qls ~]# awk '!/^\s*$|^#/' sshd_config
Port 22
ListenAddress 0.0.0.0
```
```
3. 将/etc/passwd文件中的第一列和第七列位置进行调换 awk 等值替换
[root@qls ~]# awk -F '[:]' '{a=$1;$1=$NF;$NF=a;print}' passwd | tr ' ' ':'
/bin/bash:x:0:0:root:/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
[root@qls ~]# awk -F '[:]' -vOFS=":" '{a=$1;$1=$NF;$NF=a;print}' passwd
/bin/bash:x:0:0:root:/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