加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

2 shell编程

发布时间:2020-12-16 01:42:42 所属栏目:安全 来源:网络整理
导读:Linux下有文本处理三剑客 -- grep sed awk ?????? grep:文本 行过滤工具 ?????? sed: 文本 行编辑器(流编辑器) ?????? awk:报告生成器(做文本输出格式化) 一、正则表达式 ?????? 1、基础正则表达式 ????????????? *????? 匹配前一个字符0次或任意多次??

Linux下有文本处理三剑客 -- grep sed awk

?????? grep:文本 行过滤工具

?????? sed: 文本 行编辑器(流编辑器)

?????? awk:报告生成器(做文本输出格式化)

一、正则表达式

?????? 1、基础正则表达式

????????????? *????? 匹配前一个字符0次或任意多次?????? (a*表示匹配前一个字符0次或任意多次,这样写没有任何意义,会匹配所有。aa*表示匹配至少包含一个a的行)

????????????? .????? 匹配除了换行符外任意一个字符

????????????? ^ $? 行首和行尾???

????????????? [ ]??? 中括号中任意一个字符

????????????? {n} 表示前面的字符恰好出现n次??? 是转义符

????????????? {n,}?????? 表示其前面的字符出现不小于 n 次

????????????? {n,m}??? 表示前一个字符至少出现n次,最多出现m次

?????? 2、扩展正则

????????????? 不需要加转义符

????????????? +???? 前一个字符匹配1次或任意多次

????????????? ?????? 前一个字符匹配0次或1次

????????????? |????? 匹配两个或多个分支选择

????????????? ()???? 匹配一个整体

?????????????

二、字符截取和替换命令

?????? 1、cut

????????????? cut 命令的默认分隔符是制表符,也就是“tab”键

????????????? -f ?? ?列号

????????????? -d ? 分隔符

????????????? -c??? 字符范围

?????? 2、awk

????????????? 常见参数

???????????????????? -F??? 指定分隔符

???????????????????? -v??? 手动指定变量参数

????????????? 1)printf格式化输出

???????????????????? printf ‘输出类型输出格式’ 输出内容

???????????????????? 输出类型:? %ns:? 输出字符串。n 是数字指代输出几个字符?

???????????????????? %ni:? 输出整数。n 是数字指代输出几个数字?

???????????????????? %m.nf:? 输出浮点数。m 和 n 是数字,指代输出的整数位数和小数位数。如%8.2f 代表共输出 8 位数,

???????????????????? 其中 2 位是小数,6 位是整数。

???????????????????? +右对齐

???????????????????? -左对齐

???????????????????? 例子:

???????????????????? 查看系统中的id大于等于1并小于等于500的用户

???????????????????? cat /etc/passwd |awk ‘BEGIN{FS=":"} $3>=1&&$3<=500{printf "%-10s %-10dn",$1,$3}‘

?

?????????????

????????????? 2)awk基本使用

???????????????????? ?awk ‘条件 1{动作 1} 条件 2{动作 2}…’ 文件名 ???????????????

???????????????????? ?例如:df -h|grep /dev/sda3|awk ‘{print $5}‘ ? 提取根分区占有率

?

????????????? 3)awk的条件

???????????????????? BEGIN???? 在 awk 程序一开始时,尚未读取任何数据之前执行。BEGIN后的动作只在程序开始时执行一次

???????????????????? END 在 awk 程序处理完所有数据,即将结束时执行。END 后的动作 只在程序结束时执行一次

????????????????????

???????????????????? >? >=?? <?? <=??? ==?? !=

???????????????????? A~B ????? 判断字符串 A 中是否包含能匹配 B 表达式的子字符串

???????????????????? A!~B ???? 判断字符串 A 中是否不包含能匹配 B 表达式的子字符串

???????????????????? /正则/

????????????????????

????????????? 4)awk的内置变量

???????????????????? $0 ? 代表目前 awk 所读入的整行数据。我们已知 awk 是一行一行读入数据 的,$0 就代表当前读入行的整行数据

???????????????????? $n ? 代表目前读入行的第 n 个字段。

???????????????????? NF?? 当前行拥有的字段(列)总数。

???????????????????? NR?? 当前 awk 所处理的行,是总数据的第几行。

???????????????????? FS??? 用户定义分隔符。awk 的默认分隔符是任何空格,如果想要使用其他 分隔符(如“:”),就需要 FS 变量定义

???????????????????? OFS 输出字段的分隔符(默认为空格)。

????????????????????

?????? 例子:统计历史命令使用次数最多的

????????????? history |awk -F ‘[ ]+‘ ‘{print $3}‘|sort|uniq -c|sort -nr|head?????

?????? 3、sed

????????????? sed 主要是用来将数据进行选取、替换、删除、新增的命令

????????????? sed [选项] ‘[动作]’ 文件名

????????????? 选项:???

???????????????????? -n?? 一般 sed 命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过 sed 命令处理的行输出到屏幕。

???????????????????? -r??? 在 sed 中支持扩展正则表达式

???????????????????? -i???? 用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出

????????????? 动作:

???????????????????? a : ???? ??追加,在当前行后添加一行或多行。添加多行时,除最后 一行外,????? 每行末尾需要用“”代表数据未完结。

???????????????????? c :?????? ? 行替换,用 c 后面的字符串替换原数据行,替换多行时,除最后一行????? 外,每行末尾需用“”代表数据未完结。?

???????????????????? i : ? 插入,在当期行前插入一行或多行。插入多行时,除最后 一行外,????? 每行末尾需要用“”代表数据未完结。?

???????????????????? d:? ???? ??删除,删除指定的行。

???????????????????? p:??? ? ??打印,输出指定的行

???????????????????? s:??? ? ??字串替换,用一个字符串替换另外一个字符串。格式为“行范围 s/????? 旧字串/新字串/g”(和 vim 中的替换格式类似)

?

三、字符处理命令

?????? 1、sort????????????????

????????????? sort [选项] 文件名

????????????? -f:? 忽略大小写

????????????? -b:? 忽略每行前面的空白部分

????????????? -n:? 以数值型进行排序,默认使用字符串型排序

????????????? -r:? 反向排序

????????????? -u:? 删除重复行。就是 uniq 命令

????????????? -t:? 指定分隔符,默认是分隔符是制表符

????????????? -k n[,m]: 按照指定的字段范围排序。从第 n 字段开始,m 字段结束(默认到行尾)

?????? 2、uniq

????????????? uniq [选项] 文件名

????????????? -i: 忽略大小写

?????? 3、wc

????????????? -l: 只统计行数

????????????? -w: 只统计单词数

????????????? -m: 只统计字符数

????????????? -L:统计单词字符数

四、条件判断

?????? 1、按照条件进行判断

????????????? test?

???????????????????? -d?? 判断目录是否存在

???????????????????? -e??? 判断文件是否存在

???????????????????? -f??? 判断是否为普通文件

???????????????????? -s??? 判断文件是否为空

?

?????? 2、按照文件权限判断

???????????????????? -r

???????????????????? -w

???????????????????? -x

???????????????????? -u?? 判断是否有suid权限

???????????????????? -g?? 判断是否有sgid权限

???????????????????? -k??? 判断是否有sbit权限

?????? 3、两文件之间的判断

???????????????????? 文件1 -nt 文件2   判断文件 1 的修改时间是否比文件 2 的新(如果新则为真)

???????????????????? 文件 1 -ot 文件 2 ???? 判断文件 1 的修改时间是否比文件 2 的旧(如果旧则为真)

???????????????????? 文件 1 -ef 文件 2 ???? 判断文件 1 是否和文件 2 的 Inode 号一致,可以理解为两个文件是否 为同一个文件。这个判断用于判断硬链接是很好的方法

?

?????? 4、整数判断

???????????????????? -eq  等于

???????????????????? -gt  大于

???????????????????? -ge  大于等于

???????????????????? -lt  小于

???????????????????? -le  小于等于

??????

?????? 5、字符串判断

???????????????????? -z??? 判断字符串是否为空(为空返回真)

???????????????????? -n?? 判断字符串是否为非空(非空返回真)

???????????????????? ==?? 判断字符串 1 是否和字符串 2 相等(相等返回真)

???????????????????? != 判断字符串 1 是否和字符串 2 不相等(不相等返回真)

?????? 6、多重条件判断

???????????????????? 判断 1 -a 判断 2? ? ? ? ? 逻辑与,判断 1 和判断 2 都成立,最终的结果才为真

???????????????????? 判断 1 -o 判断 2? ? ? ? ? 逻辑或,判断 1 和判断 2 有一个成立,最终的结果就为真

???????????????????? !判断 ????????     逻辑非,使原始的判断式取反

?

五、流程控制

?????? 1、单分支if

????????????? if [? ];then

???????????????????? 执行体???

?????? ? ??? fi

?

?????? 2、双分支if

????????????? if [? ];then

???????????????????? 条件成立执行

????????????? else

???????????????????? 条件不成立执行

????????????? fi

?????? 3、多分支if

????????????? if [? ];then

???????????????????? 条件成立执行

????????????? elif [ ];then

???????????????????? 条件成立执行

????????????? else

???????????????????? 所有条件不成立执行

????????????? fi

?

?????? 4、多分支case条件语句

????????????? case只能判断一种条件关系,而if可以判断多种

????????????? case 变量 in

????????????? 值1)

???????????????????? 执行体

????????????? ;;

????????????? 值2)

???????????????????? 执行体

????????????? ;;

????????????? *)

???????????????????? 如果变量都不是以上的值,则执行此

????????????? ;;

????????????? esac

?????????????

?????? 5、for循环

????????????? for i in 条件 ; do

???????????????????? 循环体

????????????? done?????

?????????????

????????????? for((初始值;循环控制条件;变量变化))

????????????? do

???????????????????? 循环体

????????????? done

?????? 6、while循环

????????????? while [ 条件判断 ];do

?????????????

????????????? done

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读