1. 正规表示式就是处理字串的方法,他是以行为单位来进行字串的处理行为, 正规表示法通过一些特殊符号的辅助,可以让使用者轻易的达到『查找/删除/替换』某特定字串的处理程序。
2. 正规表达式的字符串表示方式依照不同的严谨度而分为: 基础正规表达式与扩展正则表达式。
3. 通配符代表的是 bash 操作接口的一个功能,但正则表达式则是一种字符串处理的表示方式。
4. 使用正则表达式时,需要特别留意当时环境语系为何,否则可能会发现与别人不同的结果。
特殊符号:
特殊符号 |
代表意义 |
[:alnum:] |
代表英文大小写字节及数字,亦即 0-9, A-Z, a-z |
[:alpha:] |
代表任何英文大小写字节,亦即 A-Z, a-z
扫描二维码关注公众号,回复:
1120840 查看本文章
|
[:blank:] |
代表空白键与 [Tab] 按键两者 |
[:cntrl:] |
代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等 |
[:digit:] |
代表数字而已,亦即 0-9 |
[:graph:] |
除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键 |
[:lower:] |
代表小写字节,亦即 a-z |
[:print:] |
代表任何可以被列印出来的字节 |
[:punct:] |
代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $... |
[:upper:] |
代表大写字节,亦即 A-Z |
[:space:] |
任何会产生空白的字节,包括空白键, [Tab], CR 等等 |
[:xdigit:] |
代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节 |
5. grep 是一个很常见也很常用的命令,它最重要的功能就是进行字符串数据的对比,然后将符合使用者需求的字符串打印出来。 需要说明的是『grep 在数据中查找一个字符串时,是以 "整行" 为单位来进行数据的选取的。
6. 基础正则表达式字符:
RE 字符 |
意义与范例 |
^word |
意义:待搜寻的字串(word)在行首! grep -n '^#' regular_express.txt |
word$ |
意义:待搜寻的字串(word)在行尾! grep -n '!$' regular_express.txt |
. |
意义:代表『一定有一个任意字节』的字符! grep -n 'e.e' regular_express.txt |
\ |
意义:跳脱字符,将特殊符号的特殊意义去除! grep -n \' regular_express.txt |
* |
意义:重复零个到无穷多个的前一个 RE 字符 grep -n 'ess*' regular_express.txt |
[list] |
意义:字节集合的 RE 字符,里面列出想要撷取的字节! grep -n 'g[ld]' regular_express.txt |
[n1-n2] |
意义:字节集合的 RE 字符,里面列出想要撷取的字节范围! grep -n '[A-Z]' regular_express.txt |
[^list] |
意义:字节集合的 RE 字符,里面列出不要的字串或范围! grep -n 'oo[^t]' regular_express.txt |
\{n,m\} |
意义:连续 n 到 m 个的『前一个 RE 字符』 grep -n 'go\{2,3\}g' regular_express.txt |
7. sed工具
sed [-nefr] [动作]
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN
的数据一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过
sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的
sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是由萤幕输出。
动作说明:
a:新增 c:替换 d:删除 i:插入 p:打印 s:替换
(1) 以行为单位的新增/删除功能
[root@www ~]# nl /etc/passwd | sed '2,5d'
(2) 以行为单位的取代与显示功能
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
(3) 部分数据的搜寻并取代的功能
sed 's/要被取代的字串/新的字串/g'
8. 扩展正则表达式
RERE
RE 字符 |
意义与范例 |
+ |
意义:重复『一个或一个以上』的前一个 RE 字符 egrep -n 'go+d' regular_express.txt |
? |
意义:『零个或一个』的前一个 RE 字符 egrep -n 'go?d' regular_express.txt |
| |
意义:用或( or )的方式找出数个字串 egrep -n 'gd|good' regular_express.txt |
() |
意义:找出『群组』字串 egrep -n 'g(la|oo)d' regular_express.txt |
()+ |
意义:多个重复群组的判别 echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C' 上面的例子意思是说,我要找开头是 A 结尾是 C ,中间有一个以上的 "xyz" 字串的意思~ |
符
9. printf 可以通过一些特殊符号来将数据进行格式化输出;
# printf '列印格式' 实际内容
选项与参数:
关于格式方面的几个特殊样式:
\a 警告声音输出
\b 倒退键(backspace)
\f 清除萤幕 (form feed)
\n 输出新的一行
\r 亦即 Enter 按键
\t 水平的 [tab] 按键
\v 垂直的 [tab] 按键
\xNN NN 为两位数的数字,可以转换数字成为字节
10. awk 可以使用『栏位』为依据,进行数据的重新整理与输出。
awk 也是一个非常棒的数据处理工具!相较于 sed 常常作用于一整个行的处理, awk 则比较倾向于一行当中分成数个『栏位』来处理。
11. 文件的比对中,可利用 diff 及 cmp 进行比对,其中 diff 主要用在纯文字文件方面的新旧版本比对
12. patch 命令可以将旧版数据升级到新版 (主要亦由 diff 创建 patch 的补丁来源文件)。
13. 文件打印准备:pr