千家信息网

Shell正则表达式怎么用

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章将为大家详细讲解有关Shell正则表达式怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、正则表达式是什么?正则表达式是用于描述字符排列和匹配模式的一
千家信息网最后更新 2025年02月04日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安全错误 数据库的锁怎样保障安全 开机服务器正在运行中 网络安全在贵州的发展 北京网络安全大会议程 游戏软件开发是用什么笔记本 你们公司谁负责软件开发翻译 王牌战争主播开的服务器在哪玩 pdf表单与数据库交互 网络技术文档范例 制作游戏需要数据库吗 怎样打印数据库连接池信息 争当网络安全小卫士手抄报的通知 最新大数据网络技术 安徽多功能软件开发厂家价格 理想网络技术有限公司官网 网络安全小黑板如何保护网上购物 计算机网络技术专业学的什么 7种灾难网络安全错误 网络安全屏障视频 上海先进网络技术特点 重庆城管职业学院网络技术专业 国联证券软件开发面试题 内大网络安全考研 显示数据库的所有表 宾馆管理系统数据库er 阿言服务器被炸 严阵以待服务器连接丢失 未转变者服务器怎么传送玩家 田鲜生网络技术有限公司 广州华腾软件开发工作室 国外有名的网络安全网站
0