@文本处理之三剑客总结grep-sed-awk

三剑客的扩展与总结

  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


posted @ 2021-03-13 09:09  ଲ一笑奈&何  阅读(20)  评论(0编辑  收藏  举报