Shell——基本正则表达式

正则表达式的原理

在这里插入图片描述

基本正则表达式

行首定位符 ^

“^” :用来匹配行首的字符,表示行首的字符是 “ ^ ” 后面的那个字符。

[linux@localhost express]$ more exp_1.sh 
#! bin/bash

#首行定位符

#列出 /etc 目录中的以字母po开头的文件

str=`ls /etc | grep "^po"`
echo "$str"
[linux@localhost express]$ sh exp_1.sh 
polkit-1
popt.d
postfix
[linux@localhost express]$

行尾定位符 $

“$”:用来定位文本行的末尾,与 行首定位符 的作用恰恰相反。

[linux@localhost express]$ cat exp_3.sh
#! bin/bash

#行尾定位符

#列出 /etc 目录中以 conf 结尾的文件名

str=`ls /etc | grep "conf$"`

echo "$str"

[linux@localhost etc]$ sh exp_3.sh
asound.conf
chrony.conf
dracut.conf
e2fsck.conf
GeoIP.conf
host.conf
kdump.conf
krb5.conf
ld.so.conf
libaudit.conf
libuser.conf
locale.conf
logrotate.conf
man_db.conf
mke2fs.conf
nsswitch.conf
resolv.conf
rsyslog.conf
sestatus.conf
sudo.conf
sudo-ldap.conf
sysctl.conf
vconsole.conf
yum.conf
[linux@localhost etc]$

单个字符匹配 .

“.”:可以用来匹配任意单个字符,包括空格,但不包括换行符 “/n”。

当你使用 “.” 符号后,就意味着该位置一定有一个字符,无论他是什么字符。

[linux@localhost express]$ cat exp_2.sh 
#! bin/bash

#单个字符匹配 "."

#列出所有的包含字符串 "shadow" 的文件名

str=`ls /etc | grep "shadow"`

echo "$str"

echo "===_===_===_==="

#列出包含字符串 shadow ,且比其后面多一位不确定字符的 文件名  - shadow?`

str=`ls /etc | grep "shadow."`

echo "$str"
[linux@localhost express]$ sh exp_2.sh 
gshadow
gshadow-
shadow
shadow-
===_===_===_===
gshadow-
shadow-
[linux@localhost express]$ 

限定符*

限定符本身不代表任何字符,他是用来指定其前面的一个字符必须重复多少次才能满足匹配。

“ * ”:表示匹配其前导字符的任意次数,包括 0 次

[linux@localhost express]$ cat exp_4.sh 
#! bin/bash

#限定符 "*"

#筛选出以字符串 s 开头,紧跟着的一个字符 也是 s ,其次后面任意个字符 s 的文件名

str=`ls /etc | grep "^sss*"`

echo "$str"

echo "^ss 的结果,这里也是一样的,任意个 s ,可以是0个s"

echo "`ls /etc | grep "^ss"`"
[linux@localhost express]$ sh exp_4.sh 
ssh
ssl
^ss 的结果,这里也是一样的,任意个 s ,可以是0个s
ssh
ssl
[linux@localhost express]$ 

这要注意,0次也算。

字符集匹配 []
方括号 “ [] ”,用来指定一个字符集,,语法:

[sky]

其中s、k 和 y 表示任意的单个字符。

只要某个字符串在方括号所在的位置上出现了方括号中的任意一个字符,就满足匹配

另外,对于连续的数字或字母,可以用连字符 “-”来表示一个范围,列如:[1-9]、[a-f] 等

[linux@localhost express]$ cat exp_5.sh 
#! bin/bash

#字符集匹配"[]"

#筛选所有以字符串r开头,并且紧跟着一个字符c的文本行

str=`ls /etc | grep "^rc"`

echo "$str"

echo "==========="

#筛选所有以字符r开头,紧跟着一个c,下面一个字符为0-9的单个数字的文本行

str=`ls /etc | grep "^rc[0-9]"`

echo "$str"
[linux@localhost express]$ sh exp_5.sh 
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
===========
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
[linux@localhost express]$ 

字符集不匹配 [^]
前面已经介绍过 行首定位符 “^” 和 字符集匹配符 “[]”。但是如果将这两个符号结合起来,则意义就会发生变化。
符号 “[^]” 表示不匹配其中列出的任意字符,,语法:

[^sky]

其中 s、k 和 y 表示 任意字符,用法和 “[]” 神似,不再举例说明。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Shell编程中的正则表达式是一种用于匹配和操作字符串的强大工具。它使用特定的语法规则来描述和匹配符合某个模式的字符串。在Shell编程中,常用的工具如grep、sed和awk都支持使用正则表达式进行模式匹配和文本处理。正则表达式由普通字符和特殊字符(元字符)组成。普通字符指的是任意字母、数字或其他字符,而元字符具有特殊的意义和功能,用于表示模式中的特定字符或符号。通过使用正则表达式,可以实现字符串的匹配、替换、提取等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Shell编程之正则表达式](https://blog.csdn.net/weixin_51099370/article/details/124568808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Linux操作系统——Shell编程 正则表达式](https://blog.csdn.net/weixin_46411355/article/details/125628828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值