shell编程之正则表达式

一 正则表达式

1 什么是正则表达式

  1. 正则表达式用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分隔、匹配、查找及替换操作。

2 shell编程之正则表达式与通配符

正则表达式:用于在文件中匹配符合条件的字符串。正则是包含匹配。grep 、awk 、sed等命令支持正则表达式。

通配符:用于匹配符合条件的文件名,通配符是完全匹配。ls、find、cp 这些命令不支持正则表达式,只能使用shell自己的通配符来进行匹配。

  1. 通配符:
  2. - * 匹配任意内容(0个或者多个)
  3. - 匹配任意一个内容
  4. - [] 匹配中括号的一个字符

3 shell编程之基础正则表达式

正则表达式:基础正则和扩展正则

  1. 元字符:
  2. * #重复匹配前一个字符0到多次
  3. a* #这种写法无意义
  4. aa* #查找包含a的字符串
  5. . #匹配除了换行符外任意一个字符,类似通配符?
  6. .* #匹配全部内容
  7. ^ #匹配行首
  8. $ #匹配行尾
  9. ^$ #会匹配空白行
  10. [] #匹配中括号中的指定任意一个字符,只匹配一个字符
  11. [0-9]
  12. [a-z]
  13. ^[0-9] #数字开头
  14. [^] #匹配除了中括号的字符以外的任意一个字符,(取反)
  15. ^[^a-z] #匹配不用小写字母开头的行
  16. ^[^a-zA-Z] #匹配不用字母开头的行
  17. \ #转义符,让特殊的字符丧失意义
  18. \.$ #匹配使用"."结尾的行
  19. \{n\} #表示其前面的字符恰好出现n次
  20. a\{3\} #匹配a字母连续出现三次的字符串
  21. [0-9]\{3\} #匹配包含连续的三个数字的字符串
  22. \{n,\} #表示其前面字符出现不少于n次。
  23. \{n,m\} #表示其前面的字符至少出现n次,最多出现m次



6 shell编程之正则表达式案例

  1. 匹配日期格式YYYY-MM-DD
  2. [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
  3. 匹配Ip
  4. [0-9]\{1,3\}.[0-9]\{1.3\}.[0-9]\{1.3\}.[0-9]\{1.3\}

备注:

grep行提取命令

grep -v ,取反

二 字符截取命令

1 shell字符截取命令之cut命令

列提取命令

cut [选项] 文件名

  1. 选项:
  2. -f 列号:提取第几列,(默认分隔符是制表符)
  3. -d 分隔符:按照指定分隔符分隔列
  4. 例子:截取当前系统登录的用户名
  5. grep "/bin/bash" /ect/passwd | grep -v "root" | cut -f 1 -d ":"
  6. cut的局限性:
  7. 只能分隔规格的字符串
  8. 只能截取有规格的字符串

备注:df 查看系统当前的分区状态 df -h

2 shell字符截取命令之printf

标准输出命令,格式化输出!

printf '输出类型 输出格式' 输出内容

  1. 输出类型:
  2. %ns : 输出字符串。n是数字指定输出几个字符
  3. %ni 输出整数。n是数字指定输出几个数字
  4. %m.nf : 输出浮点数。mn是数字。
  5. 例如:%8.2 代表共输出8位,其中2位小数,6为整数。
  6. 输出格式:
  7. \a : 输出警告声音
  8. \b : 输出退格键
  9. \f : 清除屏幕
  10. \n :换行
  11. \r :回车
  12. \t :水平输出退格键,,也就是tab
  13. \v :垂直输出退格键,也就是tab
  14. 例子:
  15. printf '%s' $(cat test.txt) #不调整输出格式

3 shell字符截取命令之awk命令

列提取命令

awk '条件1{动作2} 条件2{动作2}...' 文件名

  1. 条件:
  2. 一般使用关系表达式作为条件
  3. x > 10 判断变量x是否大于10
  4. x >= 10 大于等于
  5. 动作:
  6. 格式化输出
  7. 流程控制语句
  8. 例子:
  9. awk '{printf $2 "\t" $4 "\n"}' text.txt
  10. df -h | awk '{print $1 "\t" $3}'
  11. awkprintprintf
  12. printf,标准输出,需加换行符
  13. print,不需要加换行符,默认最后换行

4 shell字符字符替换命令之sed命令

字符替换, sed主要用来对数据进行选取、替换、删除、新增的命令。

sed [选项] '[动作]' 文件名

  1. 选项:
  2. -n : sed 处理的行输出
  3. -e :允许对输入数据应用多条sed命令编辑
  4. -i sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
  5. 动作:
  6. a : 追加
  7. c : 行替换
  8. i 插入,插入一行或者多行
  9. d 删除,删除指定的行
  10. p :打印,输出指定的行
  11. s :字串替换

三 字符处理命令

排序命令

sort [选项] 文件名

  1. 选项:
  2. -f :忽略大小写
  3. -n :以数值型进行排序
  4. -f :反向排序
  5. -t :指定分隔符

统计命令

wc [选项] 文件名

  1. 选项:
  2. -l 只统计行数
  3. -w 只统计单词数
  4. -m 只统计字符数

欢迎访问我的csdn博客,我们一同成长!

"不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"

博客首页:http://blog.csdn.net/u010648555

Linux学习——shell编程之正则表达式和字符处理命令的更多相关文章

  1. Linux学习——shell编程之运算符

    shell编程之运算符 一:shell中常见算术运算符号和优先级 二:算术运算符 Shell 变量:是弱类型!不能进行加减乘除!比较麻烦! 例子 :shell变量弱类型 a=11 b=22 echo ...

  2. Linux学习——shell编程之环境变量配置文件

    小白学习,在学习中总结! shell编程之环境变量配置文件 一:环境变量配置文件 1 shell编程之环境变量配置 变量类型: 用户自定义变量(本地变量) 环境变量 :定义每个用户的操作环境,如pat ...

  3. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  4. Linux学习 -- Shell编程 -- 字符处理命令

    sort排序命令 sort [选项] 文件名 -f 忽略大小m写 -n 按数值型,默认字符串型 -r 反向 -t 指定分隔符 -k n[,m] 指定字段范围,默认行尾 eg. sort -n -t & ...

  5. Linux学习 -- Shell编程 -- 正则表达式

    正则表达式与通配符 正则 -- 匹配字符串 -- 包含匹配     grep.awk.sed等 通配符 -- 匹配文件名 -- 完全匹配  ls.find.cp等 基础正则表达式

  6. Linux学习 -- Shell编程 -- 字符截取命令

    cut字段提取命令 cut [选项] 文件名 -f 列号: -d 分隔符: 局限性:空格为分隔符时不适用 printf命令 printf '输出类型输出格式' 输出内容 %s, %i, %f \a, ...

  7. Linux学习 -- Shell编程 -- 流程控制

    if语句 单分支 if [ 条件判断式 ]; then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi 例子: 双分支 if [ 条件判断式 ] then 程序 else 程序 fi ...

  8. Linux学习 -- Shell编程 -- 条件判断

    按照文件类型进行判断 两种格式 test -e /root/install.log [ -e /root/install.log ]   注意空格  适合用于脚本中 echo $?可以看到结果 [ - ...

  9. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

随机推荐

  1. python基础教程(五)

    字符串基本操作 所有标准的序列操作(索引.分片.乘法.判断成员资格.求长度.取最小值和最大值)对字符串同样适用,前面已经讲述的这些操作.但是,请注意字符串都是不可变的. 字符串的方法: 字符串从str ...

  2. Spark Mllib框架1

    1. 概述 1.1 功能 MLlib是Spark的机器学习(machine learing)库,其目标是使得机器学习的使用更加方便和简单,其具有如下功能: ML算法:常用的学习算法,包括分类.回归.聚 ...

  3. httpd常用配置

    author:JevonWei 版权声明:原创作品 检查配置文件时,如下提示,则因为没有server的服务名称导致,故设置网站的服务server名称,若没有设置web服务名,主默认解析系统主机名(添加 ...

  4. 从源码分析java.lang.String.isEmpty()

    今天在写代码的时候用到了java.lang.String.isEmpty()的这个方法,之前也用过,今天突发奇想,就看了看源码,了解了解它的实现方法,总结出来,大家可以交流交流. 通常情况下,我们使用 ...

  5. eclipse如何把多个项目用不同的文件夹分隔开

    我们有时候用eclipse时,发现Project Explorer下有非常多的项目,如果大部分不用了还好,我们可以从eclipse上删掉,但是如果还经常会用到的话,删掉了,每次用的时候,还得再重新导入 ...

  6. Linux-insmod/rmmod/lsmod驱动模块相关命令(10)

    insmod:加载模块 参数: -f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入.-k 将模块设置为自动卸除.-m 输出模块的载入信息.-o   <模块名称 ...

  7. iOS蓝牙交互(4.0)

    前期准备工作:查看coreBlueTooth框架,查看一些蓝牙名词:Central(中心设备).Peripheral(外围设备).advertisementData(广播数据).-RSSI: 信号强弱 ...

  8. Java学习记录:降低耦合度

    耦合度定义 耦合度(Coupling)是对模块间关联程度的度量.耦合的强弱取决与模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少. 模块间的耦合度是指模块之间的依赖关系,包括控制关系.调用 ...

  9. TitleLayout——一个Android轻松实现标题栏的库

    TitleLayout 多功能.通用的.可在布局或者使用Java代码实现标题栏: 支持沉浸式状态栏: 支持左侧返回按钮不需要手动实现页面返回: 支持左侧按钮,中间标题,右边按钮点击 左侧支持图片+文字 ...

  10. 201521123004《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 答:主要以泛型为主 //简单的泛型类的定义,T为类型参数 public ...