您的位置:首页 > 运维架构 > Shell

Linux学习——shell编程之正则表达式和字符处理命令

2017-07-16 16:42 357 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: