正规表示法与文件格式化处理
『正规表示法与通配符是完全不一样的东西』 这很重要,因为『通配符 (wildcard) 代表的是 bash 操作接口的一个功能』,但正规表示法则是一种字符串处理的表示方式, 这两者要分的很清楚才行。
基础正规表示法
语系
不同语系的编码数据并不相同,所以就会造成数据撷取结果的差异
- LANG=C 时:0 1 2 3 4 … A B C D … Z a b c d …z
- LANG=zh_TW 时:0 1 2 3 4 … a A b B c C d D … z Z
一般都选用LANG=C来进行文本数据的处理。
同时为了防止不同语系编码不同造成的结果的不同,所以有了一些特殊符号如下:
符号 | 含义 |
---|---|
[:alnum:] | 代表英文大小写字符及数字,亦即 0-9, A-Z, a-z |
[:alpha:] | 代表任何英文大小写字符,亦即 A-Z, a-z |
[: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 的数字与字符 |
grep进阶选项
grep [-A] [-B] [--color=auto] '搜寻字符串' filename
选项 | 作用 |
---|---|
-A | 后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来; |
-B | 后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来; |
–color=auto | 可将正确的那个撷取数据列出颜色(默认关键词显色) |
利用中括号
[] 里面不论有几个字符,他都仅代表某『一个』字符。例如t[ae]st仅代表tast或者test,
符号 | 含义 |
---|---|
[-] | 该字符组是连续的,例如大写英文/小写英文/数字等等,就可以使用[a-z],[A-Z],[0-9]等方式来书写 |
[^] | 反向选取 |
行首和行尾字符 $ ^
符号 | 含义 |
---|---|
^ | 行首,例如’^the’则为选取the开头的行 |
$ | 行尾,例如‘.$’则为选取.为结尾的行,其中\为转义 |
任意字符和重复字符
符号 | 含义 |
---|---|
* | 重复前一个字符,0到无穷 |
. | 任意字符 |
限定连续 RE 字符范围
用{ }可以进行指定字符连续出现次数的限定,例如:
o\{2\} 可以用于设定o连续出现两次,如果限定为2~6次则为o\{2,6\}。
文件格式化
这里的格式化指的是:让文件按照你想要的样子进行输出
格式化打印:printf
printf '打印格式' 实际内容
字符 | 样式 |
---|---|
\a | 警告声音输出 |
\b | 退格键(backspace) |
\f | 清除屏幕 (form feed) |
\n | 输出新的一行 |
\r | 亦即 Enter 按键 |
\t | 水平的 [tab] 按键 |
\v | 垂直的 [tab] 按键 |
\xNN | NN 为两位数的数字,可以转换数字成为字符。 |
awk
用于数据处理
awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filename
一般awk处理流程为:
- 读入第一行,并将第一行的资料填入 $0, $1, $2… 等变数当中;
- 依据 “条件类型” 的限制,判断是否需要进行后面的 “动作”;
- 做完所有的动作与条件类型;
- 若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。
awk还有几个重要的变量:
变量 | 含义 |
---|---|
NF | 每一行拥有的字段数 |
NR | 当前行为第几行 |
FS | 当前的分割字符,默认为空格键 |
文件比对工具
diff
以行为单位来对比两个文件
diff [-bBi] from-file to-file
选项 | 作用 |
---|---|
-b | 忽略一行当中,仅有多个空白的差异(例如 “about me” 与 “about me” 视为相同 |
-B | 忽略空白行的差异。 |
-i | 忽略大小写的不同。 |
cmp
cmp [-l] file1 file2
-l :将所有的不同点的字节处都列出来。因为 cmp 预设仅会输出第一个发现的不同点。
patch
常用于文件更新。