• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
2022
博客园    首页    新随笔    联系   管理    订阅  订阅

字符处理三剑客

1. sed命令

  #擅长增删改查       替换

选项:

-n		#取消默认输出 

-r		#支持扩展正则使用 

-i		#改变文件内容  

-e		#允许多项编辑  

内部指令:

p			#print  	打印 

d			# 删除  排除

a			#追加  将内容追加指定内容的后面 

i			#插入   将内容插入到指定的内容的前面  

s			#替换 

g			#全局 

i			#忽略大小写 

查 过滤

  [root@qls ~]# sed -n   '/root/p'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roottttt

[root@qls ~]# sed -n   '/^root/p'  passwd 
root:x:0:0:root:/root:/bin/bash
roottttt

[root@qls ~]# sed  -nr  '/root|sshd/p'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
roottttt

#打印不连续的内容
[root@qls ~]# sed  -n  '/sync/p;/mail/p'  passwd 
sync:x:5:0:sync:/sbin:/bin/sync
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

#打印某个字符串到某个字符串的所有内容 
[root@qls ~]# sed  -n  '/sync/,/mail/p'  passwd 
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

#打印单行 
[root@qls ~]# sed  -n  '1p'  passwd 
root:x:0:0:root:/root:/bin/bash

#打印连续的行
[root@qls ~]# sed  -n  '1,3p'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#打印不连续的行
[root@qls ~]# sed  -n  '1p;3p'  passwd 
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@qls ~]# sed  -n '1,3p'  passwd 
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

删     排除  

#删除包含root字符串的行  

[root@qls ~]# sed  '/root/d'  passwd 
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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ROOT

#删除不连续的字符串   删除多个字符串  

[root@qls ~]# sed  '/root/d;/lp/d'  passwd 
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
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

#删除连续的字符串

[root@qls ~]# sed  '/adm/,/games/d'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin

#删除单行
[root@qls ~]# sed '1d'  passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#删除连续的行
[root@qls ~]# sed '1,10d'  passwd 
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

#删除不连续的行 

[root@qls ~]# sed '1d;10d'  passwd 
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

#删除第一行到最后一行   $ 表示结尾 

[root@qls ~]# sed  '1,$d'  passwd 
[root@qls ~]# 

#真正改变了文件的内容 

[root@qls ~]# sed  -i  '1,10d'  passwd 
[root@qls ~]# cat passwd
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

增		添加内容到文件中 
a  追加   

#将内容追加第五行的后面 
[root@qls ~]# sed  '5aoldboy'  passwd 
root:x:0:0:root:/root:/bin/bash
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

#将内容追加到文件的底部

[root@qls ~]# sed  '$aoldboy'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

#追加多行内容到文件中    \n 换行符    \t  tab键 

[root@qls ~]# sed  '10aoldboy\noldgirl'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

[root@qls ~]# sed -i  '$aoldboy'  passwd 
[root@qls ~]# tail -1  passwd
oldboy

#根据字符串进行追加内容  

[root@qls ~]# sed  '/sshd/aoldboy'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

i   插入

#在第一行的前面插入内容  

[root@qls ~]# sed   '1ioldboy'  passwd 
oldboy
root:x:0:0:root:/root:/bin/bash
root:/sbin/nologin
oldboy

#在最后一行的前面插入内容 

[root@qls ~]# sed  '$iold'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

#插入多行内容  

[root@qls ~]# sed  '1ioldboy\noldgirl'  passwd 
oldboy
oldgirl
root:x:0:0:root:/root:/bin/bash
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy

[root@qls ~]# sed  '/root/inew'  passwd 
new
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
new
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologi
oldboy


[root@qls ~]# sed  '/root/aold'  passwd  | sed  '/sshd/illl'
root:x:0:0:root:/root:/bin/bash
old
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy

[root@qls ~]# sed  -e  '/root/aold'  -e '/sshd/illl'  passwd 
root:x:0:0:root:/root:/bin/bash
old
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

改   替换 

s  替换       g   全局    i   忽略大小写  

#全局替换 

[root@qls ~]# sed  's#root#admin#g'  passwd 
admin:x:0:0:admin:/admin:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#针对某一行进行替换 

[root@qls ~]# sed '1s#root#admin#g'  passwd   
admin:x:0:0:admin:/admin:/bin/bash
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
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy

#替换多行内容  

[root@qls ~]# sed  '1,10s#root#admin#g'   passwd 
admin:x:0:0:admin:/admin:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy

#替换的时候,忽略大小写  

[root@qls ~]# echo "ROOT"  >>passwd
[root@qls ~]# 
[root@qls ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@qls ~]# sed  's#root#admin#g'  passwd 
admin:x:0:0:admin:/admin:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@qls ~]# sed  's#root#admin#gi'   passwd 
admin:x:0:0:admin:/admin:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#替换第10行到最后一行的内容 

[root@qls ~]# sed  '10,$s#root#admin#gi'   passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
admin

#满足包含root字符串行,再进行替换操作 

[root@qls ~]# sed  '/root/s#bin#oldboy#g'  passwd 
root:x:0:0:root:/root:/oldboy/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

#满足以root开头的行 再进行替换操作 

[root@qls ~]# sed  '/^root/s#bin#oldboy#g'  passwd 
root:x:0:0:root:/root:/oldboy/bash
bin:x:1:1:bin:/bin:/sbin/nologin

#在每个root后面加上一个abc

[root@qls ~]# sed  's#root#rootabc#g'  passwd 
rootabc:x:0:0:rootabc:/rootabc:/bin/bash
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/rootabc:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

#给文件的每一行前面加上注释  # 

[root@qls ~]# sed  's#^#\##g'   passwd 
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#oldboy
#ROOT

#把所有的#删除掉  

[root@qls ~]# sed  's#\###g'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT

#将某个字符串全部删除 

[root@qls ~]# sed  's#root##g'  passwd 
:x:0:0::/:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT

#排除空行  删除空行 

[root@qls ~]# cp  /etc/ssh/sshd_config   ./

^		#以什么开头 

$		#以什么为结尾  

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

[root@qls ~]# grep -v  '^$'  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.  

[root@qls ~]# sed  '/^$/d'   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

#后向引用    ()    扩展正则  

前期定义   后期调用   \1  \2     第一个括号里面的内容 用 \1   第二个括号就是\2  

[root@qls ~]# sed  -r  '8s#(.*)#\1 oldboy#g'   passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT```

#取IP地址 

[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 12703  bytes 1441173 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8645  bytes 925660 (903.9 KiB)
        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 ~]# ifconfig   eth0   | sed  -n '2p' | sed  -r  's#(^.*et )(.*)(  n.*$)#\1#g'
        inet 
[root@qls ~]# ifconfig   eth0   | sed  -n '2p' | sed  -r  's#(^.*et )(.*)(  n.*$)#\3#g'
  netmask 255.255.255.0  broadcast 10.0.0.255

[root@qls ~]# ifconfig   eth0   | sed  -nr  '2s#(^.*et )(.*)(  n.*$)#\2#gp'
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'
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip  a s eth0  | sed  -n '3p'  | sed  -r  's#(^.*t )(.*)(/.*$)#\2#g'
10.0.0.100
[root@qls ~]# ip  a s eth0  | sed  -nr  '3s#(^.*t )(.*)(/.*$)#\2#gp'
10.0.0.100

#将passwd文件中的第一列与第七列的位置进行调换 

[root@qls ~]# sed  -nr  's#(.*)(:x.*:)(.*)#\3\2\1#gp'  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:81:81:System message bus:/:dbus
/sbin/nologin:x:999:998:User for polkitd:/:polkitd
/sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd
/sbin/nologin:x:89:89::/var/spool/postfix:postfix

#打印行号 

[root@qls ~]# sed  =  passwd 
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin
4
adm:x:3:4:adm:/var/adm:/sbin/nologin
5
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin



2. awk命令

 擅长取列      计算   数组  函数    编程语言 

内部命令   内部变量 


	NR 		#行号  
	
	$0		#完整的一行内容 
    
    $n		# n 是数字  表示取出第几列  多列用逗号分割 
	
	-F  	#FS   分隔符的变量
    
    NF		#最后一列 为第几列  
    
    $NF		#显示最后一列的内容
	
查   过滤


[root@qls ~]# awk  '/root/'   passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@qls ~]# awk  '/root/;/adm/'   passwd 
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin


[root@qls ~]# awk  '/root|adm/'   passwd 
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin


[root@qls ~]# awk  '/adm/,/mail/'   passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin


[root@qls ~]# awk  'NR==1'  passwd 
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# awk  'NR==1,NR==3'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# awk  'NR==1;NR==3'  passwd 
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin


[root@qls ~]# awk  'NR>10'  passwd 
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin


[root@qls ~]# awk  'NR<=2'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@qls ~]# awk  'NR>=15'  passwd 
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin


&&		#并且 


[root@qls ~]# awk  'NR>10 && NR<16'  passwd 
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

||  	#或者 

[root@qls ~]# awk  'NR<3 || NR>15'   passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin


#打印整个文件内容

[root@qls ~]# awk  '{print  $0}'   passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

#给文件内容加上行号 

[root@qls ~]# awk  '{print NR,$0}'   passwd 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin

#取反  排除 

!  取反  排除  

[root@qls ~]# awk  '!/sbin/'  passwd 
root:x:0:0:root:/root:/bin/bash

[root@qls ~]# awk  'NR!=1'  passwd 
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
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

#排除了第5行到第15行

[root@qls ~]# awk  'NR<5 || NR >15'  passwd 
root:x:0:0:root:/root:/bin/bash
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
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

# 取列 

[root@qls ~]# awk  -F:  '{print $1}'  passwd 
root
bin
daemon
adm
lp
sync
shutdown
halt

[root@qls ~]# awk  -F:  '{print $1,$2}'  passwd 
root x
bin x
daemon x
adm x
lp x

[root@qls ~]# awk  -F:  '{print $NF}'  passwd 
/bin/bash
/sbin/nologin
/sbin/nologin

$(NF-1)   倒数第二列 

[root@qls ~]# awk  -F:  '{print $(NF-1)}'  passwd 
/root
/bin
/var/empty/sshd
/var/spool/postfix


[root@qls ~]# awk  -F '[:]'  '{print $1}'  passwd 
root
bin
daemon
adm

#默认分隔符为 空白字符 

[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 15508  bytes 1698801 (1.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10471  bytes 1145384 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@qls ~]# ifconfig   eth0 | awk  'NR==2'  
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
[root@qls ~]# ifconfig   eth0 | awk  'NR==2'   | awk  '{print  $2}'
10.0.0.100
[root@qls ~]# ifconfig   eth0 | awk  'NR==2{print  $2}'
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 | awk  'NR==3'
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip  a  s eth0 | awk  'NR==3' | awk  -F '[ /]'  '{print $6}'
10.0.0.100
[root@qls ~]# ip  a  s eth0 | awk  'NR==3' | awk  -F '[ /]*'  '{print $3}'
10.0.0.100
[root@qls ~]# echo "    //   inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0" >ip.txt
[root@qls ~]# cat ip.txt
    //   inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# awk  -F '[ /]'  '{print $11}' ip.txt 
10.0.0.100
[root@qls ~]# awk  -F '[ /]*'  '{print $3}' ip.txt 
10.0.0.100

#指定分隔符   使用双引号引起来  

[root@qls ~]# awk  -F:  '{print $1":"$2}'  passwd 
root:x
bin:x
daemon:x

[root@qls ~]# awk  -F:  '{print $1"脱产10期"$2}'  passwd 
root脱产10期x
bin脱产10期x
postfix脱产10期x


[root@qls ~]# awk  -F:  '{print  $NF":"$2":"$3":"$4":"$5":"$6":"$1}'  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

**3. grep命令**

grep #过滤 给过滤出来的内容加上颜色

选项:

 -n		#给过滤出来的内容加上此行所在文件的行号  
 
 -i		#忽略大小写  
 
 -c		#统计的是行数 包含过滤字符串的行数  
 
 -v		#排除  删除   取反  
 
 -o		#只显示过滤出来的内容 
 
 -w		#精确匹配  只匹配你要过滤的字符串,而不是过滤包含此字符串的字符串 
 
 -r		#递归过滤   过滤多个文件   针对目录操作  

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

 -C		#匹配过滤出来的内容各向上向下多少行 
 
 -E		#支持扩展正则使用     ===    egrep  
 
 ^		#以什么开头  
 
 $		#以什么为结尾
 
 ^$		#空行   排除存在空格或者tab键的空行  
 
 .		#匹配除换行符以外的任意一个字符 
 
 *		#匹配前面的字符出现0次或者0次以上  
 
 .*		#所有
 
 |		#或者    扩展正则 
posted @ 2021-03-13 22:23  博客之记  阅读(43)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3