linuxunix shell 中expr 字符串匹配问题请教~

linuxunix shell 中expr 字符串匹配问题请教~,第1张

个人认为,就是完全匹配与部分匹配的差别。

grep

只要字符串中有部分能够与正则匹配即可,并且会输出匹配的一整行。帮助里这样讲:

grep

searches

the

named

input

FILEs

(or

standard

input)

for

lines

containing

(注意,是containing)

a

match

to

the

given

PATTERN.

By

default,

grep

prints

the

matching

lines.

如果你在终端里正确设置了颜色显示,那么可以看到:

echo

"abcde"

|

grep

"cde"

结果输出

abcde,其中cde是高亮红色显示的(只匹配了部分)。

echo

"abcde"

|

grep

".*cde"

结果也是输出

abcde,其中abcde全是高亮红色显示的。

这表示grep是部分匹配的,只要有部分字符串匹配就OK。

expr

STRING

:

REGEXP

则是完整匹配,输出最后匹配的那个位置(anchor)。帮助里这样说的:

STRING

:

REGEXP

anchored

pattern

match

of

REGEXP

in

STRING

规定了:后面必须跟正则表达式,用于格式匹配。

.*b

是正则表达式,可用于匹配任何以b结尾的字符串。

但“cde”如果被用作完全匹配的话,就是必须匹配以c开头的字符串,显然匹配不到,因为:前的字符串以a开头。^_^

如果改为

expr

"cdeab"

:

"cde"

,这样就可以匹配成功并且返回3。

看看源码应该能更清楚内部实现方式的区别。我没看过,因此也不好多说了。以上纯属个人看法,仅供探讨。

cd 路径

grep ' \ <字符串\>' filename

如果有需要自动保存到文件可以这样

grep ' \ <48\>' filename >>文件名 (追加)

字符匹配:

. :匹配任意单个字符

[] :匹配指定范围内的任意单个字符;

[^]:匹配制定范围外任意单个字符 [:digit:] lower upper alpha alnum space

匹配次数:用在要指定其出现的次数的字符后面,用于限制其前面字符出现的次数

*:匹配其在前面的字符任意次:0,1.多次

.*:匹配任意长度的任意字符

\?:匹配其前面字符0次或一次,及前面字符是可有可无

\+:匹配其前面字符一次或是多次,至少一次,

\{m\}匹配前面字符m次

\{m.n\}匹配其前面的字符至少m次,之多n次

\{0,n\}:之多n次

\{m,\} :至少m次

位置锚定:

^:行首锚定:用于模式的最左侧

$:行尾锚定:用于模式的最右侧

^PATTERN:用于PATTERN

^$:空白行

^[[:space:]]:空行或包含空白字符的行

单词:非特殊字符组成的连续字符(字符串)都成为单词

\

\>或是\b:词尾锚定,用于单词模式的右侧

\:匹配完整单词

以上所述是小编给大家介绍的Linux中基本正则表达式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8492090.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存