Shell常用命令与正则表达式

目录

[命令 sort------升序排序](#命令 sort——升序排序)

[命令 uniq------进行去重](#命令 uniq——进行去重)

[命令 tr------修改内容](#命令 tr——修改内容)

[命令 cut------列截取](#命令 cut——列截取)

[命令 split ------分割文件](#命令 split ——分割文件)

[命令 paste------合并文件列](#命令 paste——合并文件列)

[命令 eval------扫描工具](#命令 eval——扫描工具)

正则表达式

正则表达式的组成

正则表达式元字符

基础元字符

扩展元字符


命令 sort------升序排序

  • 按首字母排序,首字母一样按第二个字母排序,以此类推
  • 按第一个数排序,第一个数一样按第二个数排序,以此类推

格式: xxx | sort 选项

sort 选项 文件
sort -n #按照数组进行排序

-r #反向排序

-u #排序后去重

-t "字段分隔符" -k 字段序号 #根据 -t 指定的分隔符的第k子字段进行排序

-f #忽略大小写,会将所有小写字母看做大写

-b #忽略每行前面的空格

快速找到一个目录中的最大文件

du -a /var/log | sort -nr | head -n 5 #在/var/log文字中找到最大的前五个文件

命令 uniq------进行去重

  • 用于报告或者忽略文本中连续的重复行,常与sort命令相结合
  • **注意:**是连续的行。可以先排序使变成连续的行,再执行去重操作,否则不连续的重复行不能去重

格式: xxx | uniq 选项

uniq 选项 文件
uniq -c #对连续的重复行进行去重,并统计重复次数

-d #仅输出连续重复的行

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

命令 tr------修改内容

格式: tr 选项 "字符集1" "字符集2" 文件
tr -c #保留字符集1的字符,其他的字符(包括\n)用字符集2替换

-d #删除所有属于字符集1的字符

-s#将重复出现的字符串压缩为一个字符;用字符2替换字符1

-t#字符集2替换字符集1

tc -s "\n" #将文件中行空白去掉

命令 cut------列截取

格式:cut 参数

cat 文件 | cut 选项
cut -d "字段分隔符" -f 字段序号 #根据 -d 指定的分隔符的第f子字段进行提取

--complement #用于排除所指定的字符

--output-delimiter #更改输出内容的分隔符

-b 2-5 #下标1到4的内容

命令 split ------分割文件

格式:split 选项 参数 原始文件 拆分后文件名前缀
split -l #按照行数分隔文件,默认1000行

-b #按照文件大小分隔,单位:字节

-d #输出的目标文件后缀用数字替代
split -b 1G -d 原文件 目标文件名前缀 #将一个10G文件分割为10个1G的文件

split -l 10 -d 原文件 目标文件名前缀 #将一个100行文件分割为10个10行的文件

命令 paste------合并文件列

格式:paste 选项 文件1 文件2
paste -d '分隔符' #指定输出的字段分隔符

-s #将每个列横向输出
cat 文件1 文件2 ... > 新文件 #合并文件的行
paste -d '分隔符' 文件1 文件2 ... > 新文件 #合并文件的列

命令 eval------扫描工具

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

a=100 b=a ecal $b=50

则 echo $a 值为 50

正则表达式

通常用于判断语句中,用来检查某一字符串是否满足某一格式。作用于匹配文件内容。

正则表达式的组成

  • 普通字符:包括大小写字母、数字、标点符号及一些其他符号
  • **元字符:**在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式

正则表达式元字符

基础元字符

(支持的工具:grep、egrep、sed、awk)

  • **\:**转义字符,将一些特殊符号转义成普通字符 \? \! \\ 将一些普遍字母字符转义成特殊字符 \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 使用时 {} 前面不用加 \)

扩展元字符

(支持的工具:egrep、awk)grep -E sed -r

  • **+ :**匹配前面子表达式1次以上,例:go+d,将匹配至少一个o,如god、good、goood等
  • **? :**匹配前面子表达式0次或者1次,例:go?d,将匹配gd或god
  • **() :**将括号中的字符串作为一个整体,例:g(oo)+d,将匹配oo整体1次以上,如good、gooood等
  • **| :**以或的方式匹配字符串,例:g(oo|la)d,将匹配good或者glad
相关推荐
小林熬夜学编程34 分钟前
【MySQL】第十一弹---复合查询全攻略:多表、自连接、子查询与合并查询
android·linux·开发语言·数据库·mysql·算法
修己xj1 小时前
算法系列之排序算法-堆排序
数据结构·算法·排序算法
Serendipity-Solitude1 小时前
物联网概念
物联网·算法
补三补四1 小时前
因子有效性的审判使者——回测分析【量化实践】
大数据·人工智能·算法·金融·数据分析
憧憬从前2 小时前
头歌实验---C/C++程序设计:实验2:顺序结构程序设计
c语言·c++·算法
mvufi2 小时前
day22 第七章 回溯算法part01
算法
大锦终2 小时前
常见排序算法
c语言·算法·排序算法
guihong0042 小时前
分布式系统中的关键技术解析:幂等性、负载均衡、限流算法及其实现
运维·算法·负载均衡
Reese_Cool3 小时前
【洛谷贪心算法】P1106删数问题
c++·算法·贪心算法·蓝桥杯
迷茫小玄森3 小时前
逻辑回归-乳腺癌肿瘤预测
人工智能·算法·机器学习·回归·逻辑回归·sklearn