Linux学习——shell编程之正则表达式和字符处理命令
shell编程之正则表达式
一 正则表达式
1 什么是正则表达式
正则表达式用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分隔、匹配、查找及替换操作。
2 shell编程之正则表达式与通配符
正则表达式:用于在文件中匹配符合条件的字符串。正则是包含匹配。grep 、awk 、sed等命令支持正则表达式。
通配符:用于匹配符合条件的文件名,通配符是完全匹配。ls、find、cp 这些命令不支持正则表达式,只能使用shell自己的通配符来进行匹配。
通配符:
- * 匹配任意内容(0个或者多个)
- ? 匹配任意一个内容
- [] 匹配中括号的一个字符
3 shell编程之基础正则表达式
正则表达式:基础正则和扩展正则
元字符:
* #重复匹配前一个字符0到多次
a* #这种写法无意义
aa* #查找包含a的字符串
. #匹配除了换行符外任意一个字符,类似通配符?
.* #匹配全部内容
^ #匹配行首
$ #匹配行尾
^$ #会匹配空白行
[] #匹配中括号中的指定任意一个字符,只匹配一个字符
[0-9]
[a-z]
^[0-9] #数字开头
[^] #匹配除了中括号的字符以外的任意一个字符,(取反)
^[^a-z] #匹配不用小写字母开头的行
^[^a-zA-Z] #匹配不用字母开头的行
\ #转义符,让特殊的字符丧失意义
\.$ #匹配使用"."结尾的行
\{n\} #表示其前面的字符恰好出现n次
a\{3\} #匹配a字母连续出现三次的字符串
[0-9]\{3\} #匹配包含连续的三个数字的字符串
\{n,\} #表示其前面字符出现不少于n次。
\{n,m\} #表示其前面的字符至少出现n次,最多出现m次
6 shell编程之正则表达式案例
匹配日期格式YYYY-MM-DD
[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
匹配Ip
[0-9]\{1,3\}.[0-9]\{1.3\}.[0-9]\{1.3\}.[0-9]\{1.3\}
备注:
grep行提取命令
grep -v ,取反
二 字符截取命令
1 shell字符截取命令之cut命令
列提取命令
cut [选项] 文件名
选项:
-f 列号:提取第几列,(默认分隔符是制表符)
-d 分隔符:按照指定分隔符分隔列
例子:截取当前系统登录的用户名
grep "/bin/bash" /ect/passwd | grep -v "root" | cut -f 1 -d ":"
cut的局限性:
只能分隔规格的字符串
只能截取有规格的字符串
备注:df 查看系统当前的分区状态 df -h
2 shell字符截取命令之printf
标准输出命令,格式化输出!
printf '输出类型 输出格式' 输出内容
输出类型:
%ns : 输出字符串。n是数字指定输出几个字符
%ni : 输出整数。n是数字指定输出几个数字
%m.nf : 输出浮点数。m和n是数字。
例如:%8.2 代表共输出8位,其中2位小数,6为整数。
输出格式:
\a : 输出警告声音
\b : 输出退格键
\f : 清除屏幕
\n :换行
\r :回车
\t :水平输出退格键,,也就是tab键
\v :垂直输出退格键,也就是tab键
例子:
printf '%s' $(cat test.txt) #不调整输出格式
3 shell字符截取命令之awk命令
列提取命令
awk '条件1{动作2} 条件2{动作2}...' 文件名
条件:
一般使用关系表达式作为条件
x > 10 判断变量x是否大于10
x >= 10 大于等于
动作:
格式化输出
流程控制语句
例子:
awk '{printf $2 "\t" $4 "\n"}' text.txt
df -h | awk '{print $1 "\t" $3}'
awk中print和printf
printf,标准输出,需加换行符
print,不需要加换行符,默认最后换行
4 shell字符字符替换命令之sed命令
字符替换, sed主要用来对数据进行选取、替换、删除、新增的命令。
sed [选项] '[动作]' 文件名
选项:
-n : sed 处理的行输出
-e :允许对输入数据应用多条sed命令编辑
-i : 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a : 追加
c : 行替换
i : 插入,插入一行或者多行
d : 删除,删除指定的行
p :打印,输出指定的行
s :字串替换
三 字符处理命令
排序命令
sort [选项] 文件名
选项:
-f :忽略大小写
-n :以数值型进行排序
-f :反向排序
-t :指定分隔符
统计命令
wc [选项] 文件名
选项:
-l 只统计行数
-w 只统计单词数
-m 只统计字符数
欢迎访问我的csdn博客,我们一同成长!
"不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"
博客首页:http://blog.csdn.net/u010648555
Linux学习——shell编程之正则表达式和字符处理命令的更多相关文章
- Linux学习——shell编程之运算符
shell编程之运算符 一:shell中常见算术运算符号和优先级 二:算术运算符 Shell 变量:是弱类型!不能进行加减乘除!比较麻烦! 例子 :shell变量弱类型 a=11 b=22 echo ...
- Linux学习——shell编程之环境变量配置文件
小白学习,在学习中总结! shell编程之环境变量配置文件 一:环境变量配置文件 1 shell编程之环境变量配置 变量类型: 用户自定义变量(本地变量) 环境变量 :定义每个用户的操作环境,如pat ...
- Linux学习——shell编程之变量
shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...
- Linux学习 -- Shell编程 -- 字符处理命令
sort排序命令 sort [选项] 文件名 -f 忽略大小m写 -n 按数值型,默认字符串型 -r 反向 -t 指定分隔符 -k n[,m] 指定字段范围,默认行尾 eg. sort -n -t & ...
- Linux学习 -- Shell编程 -- 正则表达式
正则表达式与通配符 正则 -- 匹配字符串 -- 包含匹配 grep.awk.sed等 通配符 -- 匹配文件名 -- 完全匹配 ls.find.cp等 基础正则表达式
- Linux学习 -- Shell编程 -- 字符截取命令
cut字段提取命令 cut [选项] 文件名 -f 列号: -d 分隔符: 局限性:空格为分隔符时不适用 printf命令 printf '输出类型输出格式' 输出内容 %s, %i, %f \a, ...
- Linux学习 -- Shell编程 -- 流程控制
if语句 单分支 if [ 条件判断式 ]; then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi 例子: 双分支 if [ 条件判断式 ] then 程序 else 程序 fi ...
- Linux学习 -- Shell编程 -- 条件判断
按照文件类型进行判断 两种格式 test -e /root/install.log [ -e /root/install.log ] 注意空格 适合用于脚本中 echo $?可以看到结果 [ - ...
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
随机推荐
- python基础教程(五)
字符串基本操作 所有标准的序列操作(索引.分片.乘法.判断成员资格.求长度.取最小值和最大值)对字符串同样适用,前面已经讲述的这些操作.但是,请注意字符串都是不可变的. 字符串的方法: 字符串从str ...
- Spark Mllib框架1
1. 概述 1.1 功能 MLlib是Spark的机器学习(machine learing)库,其目标是使得机器学习的使用更加方便和简单,其具有如下功能: ML算法:常用的学习算法,包括分类.回归.聚 ...
- httpd常用配置
author:JevonWei 版权声明:原创作品 检查配置文件时,如下提示,则因为没有server的服务名称导致,故设置网站的服务server名称,若没有设置web服务名,主默认解析系统主机名(添加 ...
- 从源码分析java.lang.String.isEmpty()
今天在写代码的时候用到了java.lang.String.isEmpty()的这个方法,之前也用过,今天突发奇想,就看了看源码,了解了解它的实现方法,总结出来,大家可以交流交流. 通常情况下,我们使用 ...
- eclipse如何把多个项目用不同的文件夹分隔开
我们有时候用eclipse时,发现Project Explorer下有非常多的项目,如果大部分不用了还好,我们可以从eclipse上删掉,但是如果还经常会用到的话,删掉了,每次用的时候,还得再重新导入 ...
- Linux-insmod/rmmod/lsmod驱动模块相关命令(10)
insmod:加载模块 参数: -f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入.-k 将模块设置为自动卸除.-m 输出模块的载入信息.-o <模块名称 ...
- iOS蓝牙交互(4.0)
前期准备工作:查看coreBlueTooth框架,查看一些蓝牙名词:Central(中心设备).Peripheral(外围设备).advertisementData(广播数据).-RSSI: 信号强弱 ...
- Java学习记录:降低耦合度
耦合度定义 耦合度(Coupling)是对模块间关联程度的度量.耦合的强弱取决与模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少. 模块间的耦合度是指模块之间的依赖关系,包括控制关系.调用 ...
- TitleLayout——一个Android轻松实现标题栏的库
TitleLayout 多功能.通用的.可在布局或者使用Java代码实现标题栏: 支持沉浸式状态栏: 支持左侧返回按钮不需要手动实现页面返回: 支持左侧按钮,中间标题,右边按钮点击 左侧支持图片+文字 ...
- 201521123004《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 答:主要以泛型为主 //简单的泛型类的定义,T为类型参数 public ...