已索引

通配符(Path Name Expansion)

对多个文件名进行操作,例如 ls, rm, cp 等,使用的是通配符。例如:

[!b]??[[:digit:]][[:digit:]]*

表示:文件名不以 b 开头,然后两个任意符号,然后再两个数字,后面任意字符的文件名

正则表达式(Regular Expression,RE)

正则表达式用于对文件内容进行处理,需要工具的支持,Linux 三剑客: awk, sed, grep 均支持正则表达式。

注意事项:

  1. 最好用 "" 将正则表达式括起来,否则可能达不到想要的效果。
  2. $ export LC_ALL=C <-- 如果不调整,有时候会出现问题。To obtain the traditional interpretation of bracket expressions, you can use the C locale by setting the LC_ALL environment variable to the value C.

基础正则(BRE)

表达式含义范例
wordexact wordhello
.Any single characterh.t
[ ]Any single character in the brackets[ab2], [a-c0-2], [a.^7]
[^ ]Any single character not in the brackets[^ab2], [^a-c0-2], [^a.^7]
^beginning of line^Hello
$end of linetest.$
*zero or more of the previous characterho*t, h[aeiou]*t
\the following character is leteraltest\.$
.*zero or more of any characterTest.*ing.
pattern{n,m}n to m of the previous charactergo{2,4}d

几点说明:

  1. 在[]里面,如果有多个不连续的范围,可以直接挨着写,也可以用逗号隔开;括号里面的内容,除了第1个 ^ 表示取反外,其它字符没有特殊含义
  2. {n,m} 注意要使用转义符(egrep,grep -E,sed -r 不需要转义), "n" 只有n次, "n," 至少 n 次, ",m" 最多 m 次, "n,m" n 到 m 次.

扩展正则(ERE)

表达式含义范例
+one or more of the previous character^[a-Z0-9]+$
?zero or one of the previous characterboa?t
lor'ORA-lerror'
()元组,表示一个整体'A(xyz)+C'

关于元组的说明:

元组表示一个整体,可以对小组整体使用 + ? * 等,例如,A开头,C结尾,中间有至少一个(xyz)的串,可以这样:'A(xyz)+C'。

再如, 如果想找包含 good 或者 glad 的单词, 如果这样写 : g'oo|la'd 是不行的, 这样会解释成 goo 或 lad, 需要这样写 'g(la|oo)d', 表示 (la|oo) 是一个整体,要么是 la, 要么是 oo. egrep "(st|ST)$" 表示st结尾或者ST结尾的行, grep "(st)|(ST)$" 表示 包含(st) 的行 或者 (ST结尾)的行.

再如,我们使用semanage修改SELinux 策略时:
# semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
这里元组()和?合用,表示没有元组(目录本身)或者只有一个元组(目录下内容)。

再来,有了元组,我们还可以去引用匹配,例如:
# egrep "([a-z])([a-z]).*\2\1" demo.txt <-- \2 和 \1 分别表示前面的第2次和第1次匹配
abc134xxoobaxxooba <-- 最长匹配原则(贪婪模式)
abcgoogle

POSIX字符类(Common Regex Character Classes)

表达式含义
[:alnum:]匹配任意一个字母或者数字字符
[:alpha:]匹配任意一个字母字符
[:blank:]匹配任意一个数字字符
[:digit:]匹配任意一个数字字符
[:lower:]匹配小写字母
[:upper:]匹配大写字母
[:punct:]匹配标点符号
[:space:]匹配一个包括换行符、回车等在内的所有空白符
[:graph:]匹配任何一个可见且可打印的字符
[:xdigit:]任何一个十六进制数(即0-9,a-f,A-F)
[:cntrl:]任何一个控制字符(ASCI字符集中的前32个字母)
[:print:]任何一个可打印字符

元字符(meta charactor)

一种 perl 风格的正则表达式,只有一部分文本处理工具支持。

\b 单词边界,例如 grep "boy\b" 将抓取 boy 的行,而不会抓取 boygood 的行。
\B 非单词边界,例如 grep "boy\B" 将抓取 boygood 的行,而不会抓取 boy 的行

\d 单个数字字符, \D 单非数字字符
\w 单单词字符(字母、数字与_), \W 单个非单词字符
\s 单个空白字符, \s 单个非空白字符
\n 换行符,匹配一个新行, \r 回车
\t 横向制表符, \v 垂直制表符
\f 换页符

linux里换行是 \n, windows换行 \r\n

-- By 许望(RHCA、OCM、VCP)
最后修改:2024 年 02 月 07 日 10 : 35 AM
如果觉得我的文章对你有用,请随意赞赏