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
相关推荐
晨晖21 小时前
顺序查找:c语言
c语言·开发语言·算法
LYFlied1 小时前
【每日算法】LeetCode 64. 最小路径和(多维动态规划)
数据结构·算法·leetcode·动态规划
Salt_07282 小时前
DAY44 简单 CNN
python·深度学习·神经网络·算法·机器学习·计算机视觉·cnn
货拉拉技术2 小时前
AI拍货选车,开启拉货新体验
算法
MobotStone2 小时前
一夜蒸发1000亿美元后,Google用什么夺回AI王座
算法
Wang201220132 小时前
RNN和LSTM对比
人工智能·算法·架构
xueyongfu2 小时前
从Diffusion到VLA pi0(π0)
人工智能·算法·stable diffusion
永远睡不够的入2 小时前
快排(非递归)和归并的实现
数据结构·算法·深度优先
cheems95272 小时前
二叉树深搜算法练习(一)
数据结构·算法
sin_hielo2 小时前
leetcode 3074
数据结构·算法·leetcode