疯狂7平台官网下载

疯狂7平台官网下载
Linux帮助

Bash脚本:替换后基础篇

发布时间:2018-01-01 10:17:28来源:linux.cn编辑:LCTT
替换后(简写为 regex 或者 regexp)基本上是定义一种搜索模式的字符串,可以被用来实行“搜索”或者“搜索并替换”操作,也可以被用来验证像密码策略等条件。
替换后是一个大家可利用的非常强大的工具,并且使用替换后的优点是它能在几乎所有计算机语言中被使用。所以如果你使用 Bash 脚本或者创建一个 python 程序时,大家可以使用替换后,或者也可以写一个单行搜索查询。
在这篇教程中,大家将会学习一些替换后的基本概念,并且学习如何在 Bash 中通过 grep 使用它们,但是如果你希翼在其他语言如 python 或者 C 中使用它们,你只能使用替换后部分。那么让大家通过替换后的一个例子开始吧,
替换后看起来像 /t[aeiou]l/ 这个样子。
但这是什么意思呢?它意味着所提到的替换后将寻找一个词,它以 t 开始,在中间包含字母 aeiou 中任意一个,并且字母 l 最为最后一个字符。它可以是 tel,tal 或者 til,可以匹配一个单独的词或者其它单词像 tilt,brutal 或者 telephone 的一部分。
grep 使用替换后的语法是 $ grep "regex_search_term" file_location
如果不理解,不要担心,这只是一个例子,来展示可以利用替换后获取什么,相信我,这是最简单的例子。大家可以从替换后中获取更多。现在大家将从替换后基础的开始。
 
基础的正则表示式
现在大家开始学习一些被称为元字符的特殊字符。它们可以帮助大家创建更复杂的替换后搜索项。下面提到的是基本元字符的列表:
. 点将匹配任意字符
[ ] 将匹配一个字符范围
[^ ] 将匹配除了括号中提到的那个之外的所有字符
* 将匹配零个或多个前面的项
+ 将匹配一个或多个前面的项
? 将匹配零个或一个前面的项
{n} 将匹配 n 次前面的项
{n,} 将匹配 n 次或更多前面的项
{n,m} 将匹配在 n 和 m 次之间的项
{,m} 将匹配少于或等于 m 次的项
\ 是一个转义字符,当大家需要在大家的搜索中包含一个元字符时使用
现在大家将用例子讨论所有这些元字符。
 
. (点)
它用于匹配出现在大家搜索项中的任意字符。举个例子,大家可以使用点如:
$ grep "d.g" file1
这个替换后意味着大家在名为 ‘file1’ 的文件中查找的词以 d 开始,以 g结尾,中间可以有 1 个字符的字符串。同样,大家可以使用任意数量的点作为大家的搜索模式,如 T......h,这个查询项将查找一个词,以 T 开始,以 h 结尾,并且中间可以有任意 6 个字符。
 
[ ]
方括号用于定义字符范围。例如,大家需要搜索一些特别的单词而不是匹配任何字符,
$ grep "N[oen]n" file2
这里,大家正寻找一个单词,以 N开头,以 n 结尾,并且中间只能有 o、e 或者 n 中的一个。在方括号中大家可以提到单个到任意数量的字符。
大家在方括号中也可以定义像 a-e或者 1-18 作为匹配字符的列表。
 
[^ ]
这就像替换后的 not 操作。当使用 [^ ] 时,它意味着大家的搜索将包括除了方括号内提到的所有字符。例如,
$ grep "St[^1-9]d" file3
这意味着大家可以拥有所有这样的单词,它们以 St 开始,以字母 d 结尾,并且不得包含从 1 到 9 的任何数字。
到现在为止,大家只使用了仅需要在中间查找单个字符的替换后的例子,但是如果大家需要更多字符该怎么办呢。假设大家需要找到以一个字符开头和结尾的所有单词,并且在中间可以有任意数量的字符。这就是大家使用乘数元字符如 + * 与 ? 的地方。
{n}、{n,m}、{n,} 或者 {,m} 也是可以在大家的替换后项中使用的其他乘数元字符。
 
* (星号)
以下示例匹配字母 k 的任意出现次数,包括一次没有:
$ grep "lak*" file4
它意味着大家可以匹配到 lake、la 或者 lakkkk。
 
+
以下模式要求字符串中的字母 k 至少被匹配到一次:
$ grep "lak+" file5
这里 k 在大家的搜索中至少需要发生一次,所以大家的结果可以为 lake 或者 lakkkk,但不能是 la。
 
?
在以下模式匹配中
$ grep "ba?b" file6
匹配字符串 bb 或 bab,使用 ? 乘数,大家可以有一个或零个字符的出现。
 
非常重要的提示
当使用乘数时这是非常重要的,假设大家有一个替换后
$ grep "S.*l" file7
大家得到的结果是 small、silly,并且大家也得到了 Shane is a little to play ball。但是为什么大家得到了 Shane is a little to play ball?大家只是在搜索中寻找单词,为什么大家得到了整个句子作为大家的输出。
这是因为它满足大家的搜索标准,它以字母 s 开头,中间有任意数量的字符并以字母 l 结尾。那么,大家可以做些什么来纠正大家的替换后来只是得到单词而不是整个句子作为大家的输出。
大家在替换后中需要增加 ? 元字符,
$ grep "S.*?l" file7
这将会纠正大家替换后的行为。
 
\
\ 是当大家需要包含一个元字符或者对替换后有特殊含义的字符的时候来使用。例如,大家需要找到所有以点结尾的单词,所以大家可以使用:
$ grep "S.*\\." file8
这将会查找和匹配所有以一个点字符结尾的词。
 
通过这篇基本替换后教程,大家现在有一些关于替换后如何工作的基本概念。在大家的下一篇教程中,大家将学习一些高级的替换后的概念。同时尽可能多地练习,创建替换后并试着尽可能多的在你的工作中加入它们。
XML 地图 | Sitemap 地图