shell脚本之正则表达式

一、常用命令

1.sort命令

sort命令对行内容进行排序,默认按首字排序

cat file | sort 选项

或sort [选项] 文件

常用选项

-n 对数字进行排序

-r 反向排序数组

-u 排序后去重

-t '字符分隔符' -k 字段序号 (根据-t指定的分隔符的第k个字段进行排序)

-o 输出文件,将排序后的结果转存至指定文件

-f 忽略大小写,会将小写字母都转换为大写字母进行比较

-b 忽略每行前面的空格

如何找到某个目录下最大的文件

2.uniq命令

对连续的重复行进行去重

cat file | uniq 选项

uniq 选项 文件

uniq 文件 默认去除连续重复的行内容,只显示一次

-c 对连续的重复行进行去重,并统计重复次数

-d 仅输出 连续重复的行

-u 仅 输出不连续重复的行

结合sort -n可以把重复行内容合并显示

结合sort -n统计内容重复出现了几次

结合sort -n查看那些是重复出现的行内容

结合sort -n查看没有重复过的行内容

编写一个脚本,使远程登录本机的所有主机输入密码错误超过5次就锁定该IP

3.tr命令

对输入的内容进行替换

XXX | tr 选项 '参数1' '参数2'

-t 是tr命令的默认选项,使用参数2替换掉参数1,也可以是一个范围

-c 仅保留参数1的字符,其他字符(包括\n))用 参数2替换

-s 根据参数1进行去重,如果有参数2则再用参数2的字符替换参数1的字符

-d 删除所有参数1的字符

通过tr命令将一个IP地址分成4段

对数组排序 echo ${数组名[@]} | tr ' ' '\n' | sort -rn | tr '\n' ' '

tr删除制表符,进行格式转化

Windows另起一行格式(\r\n)转换成Linux另起一行

删除空行

bash 复制代码
cat 文件 | grep -v "^$"
cat 文件 | tr -s "\n"

4.cut 命令

cut 对行内容进行字段截取

XXX | cut 选项 参数

-d '分隔符' -f 字段序号 根据 -d 指定的分隔符的截取显示 -f 指定的字段

--complement 取反,不显示 -f 指定的字段

--output-delimiter '分隔符' 指定输出的字段分隔符

截取字符串

cut 命令截取

字符串分片

bash 复制代码
echo ${变量:下标:长度}                      #下标起始从0开始
echo $变量 | cut -b 起始下标-终止下标        #下标起始从1开始
expr substr $变量 起始下标 长度              #下标起始从1开始

5.split命令

按照格式拆分文件

-l 根据行数分割文件

-b 根据大小分割文件

-d 输出的目标文件后缀用数字替代

如何将一个10G文件分割成10个1G的文件:split -b 1G 原文件 目标文件名前缀

如何将一个100行文件分割成10个10行的文件:split -l -10 原文件 目标文件名前缀

6.paste命令

paste 将多个文件按照列进行合并

paste 选项 文件1 文件2 ...

-d '分隔符' 指定输出的字段分隔符

-s 将每个列横向输出

合并文件的行 cat 文件1 文件2 ... > 新文件

合并文件的列 paste -d '分隔符' 文件1 文件2 ... > 新文件

7.eval命令(了解)

在命令执行前先将命令行的变量置换成相对应的值,然后再执行命令

bash 复制代码
a=100
b=a
eval echo \$$b  置换成-->  echo $a  执行-> 100
eval $b=50  置换成--> a=50 执行
echo $a -> 50

二、正则表达式

通配符*?[...] 作用对象 文件/目录名,*表示匹配任意长度的任意字符。

正则表达式 作用对象 文件内容 . *表示匹配任意长度的任意字符。用法注意不能跟通配符混淆

1.基础元字符

\ 转义字符,将一些特殊符号转义成普通字符 \? \! \\ 将一些普遍字母字符转义成特殊字符 \n \t \r

^ 匹配以指定字符串开头的 ^XXX

匹配以指定字符串结尾的 XXX ^$
. 代表除了 \n 以外的任意字符

XXX\] 匹配中括号里的列表中的任意一个字符 \[.\\n\] \[0-9\] \[a-zA-Z0-9

\^XXX\] 匹配除了中括号里的列表中的任何字符 \[\^0-9\]匹配所有非数字的字符 \[\^a-zA-Z\]匹配所有非大小字母的字符 \* 匹配\*前面的字符或表达式任意次数(包括0次 1次或多次) .\* \[0-9\]\* {n} 匹配{}前面的字符或表达式 n 次 {n,} 匹配{}前面的字符或表达式至少 n 次(大于等于 n 次) {n,m} 匹配{}前面的字符或表达式 n 到 m 次(大于等于 n 次且小于等于 m 次) (注:grep sed 使用时 {} 前面要加 \\ ;egep awk grep -E sed -r 使用时 {} 前面不用加 \\) ##### 2.扩展元字符 + 匹配+前面的字符或表达式至少1次(大于等于1次 {1,}) ? 匹配?前面的字符或表达式0次或1次({0,1}) () 将()里的表达式作为一个整体 (oo)\* (oo)? \| 或 (oo\|aa) (oo\|aa)? ![](https://file.jishuzhan.net/article/1794379345037365250/6098efa9f47eaa3594d20d17f6daa8e7.webp) ![](https://file.jishuzhan.net/article/1794379345037365250/4dcd0954ebc7b621102567cde868113d.webp) ![](https://file.jishuzhan.net/article/1794379345037365250/b75d94fea8b44b54270abc048d4156a8.webp) ![](https://file.jishuzhan.net/article/1794379345037365250/8518a4310f570ef12af4b5dd7eb3e4cf.webp) **练习** 1.过滤出7位数以025开头的号码![](https://file.jishuzhan.net/article/1794379345037365250/92cd0c8ba026032426b6b6d6a37db74f.webp) ![](https://file.jishuzhan.net/article/1794379345037365250/b35c13351ae3608444c6fe8b6f55081f.webp) 2.![](https://file.jishuzhan.net/article/1794379345037365250/fa5704763ca77069e413e1f1c7708ef2.webp) ![](https://file.jishuzhan.net/article/1794379345037365250/e9e675e7e99da8e8af437cdab0dc5cd6.webp)

相关推荐
IT成长日记3 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
热爱生活的猴子3 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker
物联网老王5 小时前
Ubuntu Linux Cursor 安装与使用一
linux·运维·ubuntu
艾伦_耶格宇6 小时前
【ACP】阿里云云计算高级运维工程师--ACP
运维·阿里云·云计算
一位摩羯座DBA7 小时前
Redhat&Centos挂载镜像
linux·运维·centos
学习3人组7 小时前
CentOS配置网络
linux·网络·centos
计算机毕设定制辅导-无忧学长7 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
weixin_307779138 小时前
Hive集群之间迁移的Linux Shell脚本
大数据·linux·hive·bash·迁移学习
漫步企鹅8 小时前
【蓝牙】Linux Qt4查看已经配对的蓝牙信息
linux·qt·蓝牙·配对
cui_win8 小时前
【网络】Linux 内核优化实战 - net.core.flow_limit_table_len
linux·运维·网络