千家信息网

Shell正则表达式怎么用

发表于:2024-10-20 作者:千家信息网编辑
千家信息网最后更新 2024年10月20日,这篇文章将为大家详细讲解有关Shell正则表达式怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、正则表达式是什么?正则表达式是用于描述字符排列和匹配模式的一
千家信息网最后更新 2024年10月20日Shell正则表达式怎么用

这篇文章将为大家详细讲解有关Shell正则表达式怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、正则表达式是什么?

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

二、正则表达式与通配符

1. 正则表达式

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

2. 正则表达式元字符

正则表达式是通过元字符来进行字符串匹配的,具体请参考:http://www.cnblogs.com/refine1017/p/5011522.html

3. 通配符

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

4. 通配符包括

* 匹配任意字符

? 匹配任意一个字符

[] 匹配中括号中的任意一个字符

三、cut命令

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

1. 常用参数

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。

2. 示例1:打印出用制表符分割的文件的某一行

[root@localhost shell]# cat student.txt ID   Name  Gender Mark1    ming  F    852    zhang  F    703    wang  M    754    li   M    90[root@localhost shell]# cut -f 4 student.txt Mark85707590

3. 示例2:打印csv文件的某一行

[root@localhost shell]# cat student.csv ID,Name,Gender,Mark1,ming,F,852,zhang,F,703,wang,M,754,li,M,90[root@localhost shell]# cut -d "," -f 4 student.csv Mark85707590

4. 示例3:打印一个字符串的第几个字符

[root@localhost shell]# echo "abcdef" | cut -c 3c

5. 示例4:截取中文字符的某一个文字

[root@localhost shell]# echo "Shell编程" | cut -nb 1S[root@localhost shell]# echo "Shell编程" | cut -nb 2h[root@localhost shell]# echo "Shell编程" | cut -nb 3e[root@localhost shell]# echo "Shell编程" | cut -nb 4l[root@localhost shell]# echo "Shell编程" | cut -nb 5l[root@localhost shell]# echo "Shell编程" | cut -nb 8编[root@localhost shell]# echo "Shell编程" | cut -nb 11程

四、printf命令

1. 命令格式

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

2. 输出类型

%ns:输出字符串。n代表输出几个字符,n省略则代表全部字符

%ni:输出整数。n是指输出几个数字,n省略代表所有数字

%m.nf:输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f则代表共输出8位数,其中2位是小树,6位是整数。

3. 输出格式

\a:输出警告声音

\b:输出退格键(Backspace)

\f:清除屏幕

\n:换行

\r:回车(Enter)

\t:水平输出退格键

\v:垂直输出退格键

4. 示例

[root@localhost ~]# printf '%i %s %i %s %i\n' 1 "+" 2 "=" 31 + 2 = 3[root@localhost ~]# printf '%i-%i-%i %i:%i:%i\n' 2015 12 3 21 56 302015-12-3 21:56:30

五、awk命令

1. 命令格式

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

条件:一般使用关系表达式作为条件,如x > 10

动作:格式化输出、流程控制语句

2. 示例1:提取制表符分割的文件的某一行

[root@localhost shell]# cat student.txt ID   Name  Gender Mark1    ming  F    852    zhang  F    703    wang  M    754    li   M    90[root@localhost shell]# awk '{print $1 "\t" $4}' student.txt ID   Mark1    852    703    754    90

3. 示例2:获取磁盘利用率

[root@localhost shell]# df -hFilesystem      Size Used Avail Use% Mounted on/dev/sda2       18G 2.4G  14G 15% //dev/sda1       289M  16M 258M  6% /boottmpfs         411M   0 411M  0% /dev/shm[root@localhost shell]# df -h | grep "sda1" | awk '{print $5}'6%

六、sed命令

sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。

1. 命令格式

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

2. 选项

-n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。

-e:允许对输入数据应用多条sed命令编辑。

-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。

3. 动作

a:追加,在当前行后添加一行或多行

c:行替换,用c后面的字符串替换原数据行

i:插入,在当前行前插入一行或多行。

d:删除,删除指定的行

p:打印,输出指定的行

s:字符串替换,用一个字符串替换另一个字符串。格式为"行范围/s/旧字符串/新字符串/g"(和vim中的替换格式类似)

4. 示例

[root@localhost shell]# cat student.txt ID   Name  Gender Mark1    ming  F    852    zhang  F    703    wang  M    754    li   M    90#测试-n参数[root@localhost shell]# sed -n '2p' student.txt 1    ming  F    85#测试单行删除[root@localhost shell]# sed '2d' student.txt ID   Name  Gender Mark2    zhang  F    703    wang  M    754    li   M    90#测试多行删除[root@localhost shell]# sed '2,4d' student.txt ID   Name  Gender Mark4    li   M    90#测试追加[root@localhost shell]# sed '2a test append' student.txtID   Name  Gender Mark1    ming  F    85test append2    zhang  F    703    wang  M    754    li   M    90#测试插入[root@localhost shell]# sed '2i test insert' student.txtID   Name  Gender Marktest insert1    ming  F    852    zhang  F    703    wang  M    754    li   M    90#测试行替换[root@localhost shell]# sed '2c test replace' student.txtID   Name  Gender Marktest replace2    zhang  F    703    wang  M    754    li   M    90#测试内容替换[root@localhost shell]# sed '2s/ming/replace/g' student.txtID   Name  Gender Mark1    replace F    852    zhang  F    703    wang  M    754    li   M    90

下面看看简单的正则表达式的匹配范例,通过这些范例,相信可以比较熟练的掌握基本的正则表达式的使用:

HelloWorld 匹配任意一行任何位置上的10个字母:HelloWorld
^HelloWorld 匹配出现在行首的10个字母:HelloWorld
HelloWorld$ 匹配出现在行尾的10个字母:HelloWorld
^HelloWorld$ 匹配只包括这10个字母:HelloWorld的一行
[Hh]elloWorld 匹配HelloWorld或者helloworld
Hello.World 匹配含有Hello这5个字母,再加上任何一个字符,再加上world
Hello*World 匹配含有Hello这5个字母,再加上任意个字母,再加上world

在上面的例子中利用"."或者"*",可以匹配0个或者多个字符,但是如果要匹配的字符是一个范围,这时候就要用到"{}",因为shell中的 "{"和"}"有特殊含义,所以需要使用转移字符"\",例如:
[kouyang@kouyang kouyang] # grep -n 'o\{2\}' hello.txt
在hello.txt文件中找出出现两个连续的"o"的那一行

[kouyang@kouyang kouyang]# grep -n 'go\{2, 5\}g' hello.txt
在hello.txt文件中找到go后面出现2~5个"o"后面再紧接着一个"g"的单词的那一行

关于"Shell正则表达式怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

字符 输出 表达式 命令 正则 字符串 文件 一行 格式 示例 字母 测试 编程 字节 条件 动作 数据 通配符 代表 屏幕 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 28岁男学网络安全 刚毕业如何适应软件开发工作 网络安全重点查什么 eclipse自带数据库 幼儿网络安全活动教案 数据库语句中查询相同数据 路易吉鬼屋1联机服务器 顺义区信息化网络技术服务哪家好 网络安全监督管理违法吗 数据库安全风险自查报告 山东省地理信息数据库 比赛有网络安全大赛吗 怎么修改数据库文件结构 大同展厅触控答题软件开发公司 中文三大全文数据库 网络技术 应用课本 数据库中有空字段怎么替换 猎杀对决各个服务器的特点 dream的生存服务器IP 厦门市网络安全保障公告 服务器两个电源是一起工作的吗 怎么知道数据库没有收集的书籍 麒麟系统服务器版本查看序列号 2b2t用的什么服务器 网络安全总队为何需要外语 第三方软件开发咨询报价 java数据库需要发布吗 小米手机换字体服务器 世界收入不平等数据库官网 网络安全钓鱼网漫画
0