文章目录


三剑客的扩展与总结

  1. grep #过滤 给过滤出来的内容加上颜色
    选项:
 -n   #给过滤出来的内容加上此行所在文件的行号  

-i #忽略大小写

-c #统计的是行数 包含过滤字符串的行数

-v #排除 删除 取反

-o #只显示过滤出来的内容

-w #精确匹配 只匹配你要过滤的字符串,而不是过滤包含此字符串的字符串

-r #递归过滤 过滤多个文件 针对目录操作

-A #匹配过滤出来的内容向下多少行 后面加正整数

-B #匹配过滤出来的内容向上多少行

-C #匹配过滤出来的内容各向上向下多少行

-E #支持扩展正则使用 === egrep

^ #以什么开头

$ #以什么为结尾

^$ #空行 排除存在空格或者tab键的空行

. #匹配除换行符以外的任意一个字符

* #匹配前面的字符出现0次或者0次以上

.* #所有

| #或者 扩展正则

``` `

  1. 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


多种方法 多种选择
  1. 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