系统命令三剑客grep sed awk

  1. grep 过滤筛选命令补充
语法格式: grep 参数 "筛选信息  符号做信息匹配 "  文件名
-E ---  可以识别特殊正则符号
 | --- 正则符号 或者
-v --- 进行匹配信息取反过滤操作
-o --- 只显示过滤匹配的信息
-c --- 匹配的信息出现了多少次

  1. sed命令使用方法
作用:可以直接编辑修改文件内容
语法格式: sed 参数 '条件 指令(改/添加/删除)' 文件信息 

参数:
-i --- 将修改编辑后内容写入到磁盘中(改 删 增)
-n --- 取消默认输出信息(查)
-r --- 识别系统的正则符号
-e --- 识别多个匹配的条件或指令
指令信息:
p ---  打印输出指定信息
d --- 删除指令信息
a --- 添加指定信息在某行下面
i --- 添加指定信息在某行上面
g --- 实现全局(一行)替换操作
s --- 实现替换信息功能
c --- 将一整行进行修改替换
PS:后项引用前项()
 利用正则匹配信息会有贪婪匹配特性,因此在匹配信息时最好设置匹配边界



可以对文件进行:增 删 改 查

(1)查操作:
根据内容筛查文件信息:
sed -n '/pytohn/p' test.txt   #根据指定内容过滤单行信息  p 命令 表示print  -n取消默认输出参数(表示不显示过滤掉的信息在屏幕上)

sed -rn '/linux/,/mysql/p' test.txt #根据指定内容过滤连续多行内容

sed -rn '/^#|^$/!p' /etc/selinux/config  #根据指定内容进行取反过滤   -r识别扩展正则符号

根据行号筛查文件信息:
sed -n '2p' /etc/selinux/config  #根据行号过滤筛选内容
sed -n '2,6p' /etc/selinux/config  #根据行号区间范围进行过滤筛选
sed -n '7p;12p' /etc/selinux/config  #根据行号将不连续多行信息进行过滤筛选

(2)删除指定信息:
sed -i '/mysql/d' test.txt   #d表示delete  -i 参数后面不能加任何参数信息
sed -i.bak '/mysql/d' test.txt   #删除文件信息前会对原文件进行备份
ll test.txt.bak

删除操作注意事项:在删除数据或者修数据信息时,不要让-n参数和 -i参数同时出现

(3)增加信息操作:
#在最后一行的后面添加新的一行
sed -i '$aytt123' test.txt

#在第一行的前面插入信息
sed -i '1iytt123' test.txt

#在指定行的后面或者前面添加多行信息
sed -i '2aytt001\nytt002' test.txt   #在第二行的后面添加多行信息
#或者
sed -i -e '4aytt003' -e '4aytt004' test.txt   #在第四行的后面添加多行信息

sed -i --- 将修改内容真正写入磁盘

(4)修改信息操作
基础替换数据信息方法:
sed -i 's#需要替换的原信息#替换后的信息#g' 文件信息

高级信息替换方式:后项引用前项进行替换
$ echo 123456|sed -r 's#(..)(..)(..)#\1,\2,\3#g'
12,34,56 

$ echo 123456|sed -r 's#(..)(..)(..)#\3,\2,\1#g'
56,34,12

() -- 正则符号 将信息构建成一个整体,可以方便被引用  与参数 -r 配合

01.取出IP地址信息:sed

第一个历程:找出有IP地址信息的行
ip a s eth0|sed -n '3p'

第二个历程:
先截取无用的信息
ip a s eth0|sed -rn '3s#^.*inet(.*)#\n#gp'
然后截取后面无用的信息
ip a s eth0|sed -rn '3s#^.*inet(.*)#\1#gp'|sed -r 's#(^.*)/24.*#\1#g'



ip a s eth0|sed -rn '3s#^.*inet(.*)/24.#\1#gp'

02.批量修改文件扩展名称

历程1):生成序列
seq -w 10
历程2):拼凑出需要的命令
seq -w 10|sed -r 's#(.*)#mv oldboy\1.txt oldboy\1.jpg#g'
历程3):将拼凑出的命令进行执行
sed -w 10|sed -r 's#(.*)#mv oldboy\1.txt oldboy\1.jpg#g'|bash

04.利用用户添加命令和密码命令,批量创建以下用户,并设置密码信息
oldboy1a 1234561a
oldboy2b 1234562b
oldboy3c 1234563c

$ echo {1a,2b,3c}
1a 2b 3c
$ echo {1a,2b,3c}|xargs -n1
1a
2b
3c
---------------------------分割线--------------------------------------
{}生成序列概念:
生成数字序列/生成字母序列
生成组合序列
$ echo {1..3}{a..c}
1a 1b 1c 2a 2b 2c 3a 3b 3c
$ echo A{A,B}
AA ,BB
cp /etc/hosts{,.bak}  --- 快速备份文件数据信息  #等价于cp /etc/hosts /etc/hosts.bak
       A     {,B}    A  AB
        
cp /etc/hosts{.bak,}  --- 快速还原文件数据信息
------------------------------------------------------------------------
  1. awk 命令使用说明
概念介绍:awk 擅长对列进行操作并进行处理/可以完整信息统计工作
语法格式:awk [选项]  '模式{动作}' [文件信息]

操作技巧:
(1) 查询信息
#以下操作表示根据文件内容查询出指定行信息
$ awk '/oldboy/' test.txt

#以下操作表示根据文件行号查询出指定行信息
$ awk "NR==4" teat.txt

#以下操作表示显示出指定行中的指定列信息
awk '/oldboy/{print $2$5}' test.txt

awk '/oldboy/{print $2" "$5}' test.txt

#以下操作表示指定分割符号,取出指定列信息
awk -F "[ ;]+" '/oldboy/{print $2$5}' test.txt

#以下操作表示取出某一列匹配指定内容信息
$ awk '$2~/oldgirl/' test.txt   #取出与第二列匹配的信息

(2)排除信息
进行文件取反操作过程
$ awk '$2!~/oldgirl/' test.txt

(3)替换信息
gsub(/要替换的信息/,"替换后的内容",将第几列进行替换)  --- 替换操作
$ awk '$2~/olddog/{gsub(/;/,"¥",$5);print $2,$5}' test.txt
olddog ¥10000¥5000¥1000 

利用awk取出IP地址:

第一个历程:找出有IP地址信息的行
ip a s eth0|awk "NR==3"   #NR 表示行号信息 NF 表示每一行的最后一列
第二个历程:直接取出IP地址的列
ip a s eth0|awk -F "[  /]+" 'NR==3{print $3}'

awk高级使用方法

特殊模式:
BEGIN:
1)在处理文件之前做什么操作动作
$ awk 'BEGIN{print "人员工资收入"}{print $0}' test.txt
2)可以实现计算器功能
$ awk 'BEGIN{print 3+3}'

END:
1)在处理完文件之后做什么操作
$ awk 'END{print "人员工资收入"}{print $0}' test.txt
2)将统计运算结果进行输

内置变量:
FS #用于指定分隔符的信息
NR #表示行号信息 
NF #表示每一行的最后一列 
 $0 --- 所有列都显示

统计算法:

累加算法:i=i+1
$ awk '$2~/oldboy/{i=i+1}END{print i}' test.txt


求和算法:i=i+$x(x表示数字)

$ awk -F "[;]+" '$2~/oldboy/{i=i+$5;a=a+$6}END{print i+a}' test.txt

你可能感兴趣的:(linux基本命令,linux)