1、正则表达式
特殊符号 | [:alnum:] | 代表英文大小写字节以及数字,即0-9,A-Z,a-z |
[:alpha:] | 代表任何英文大小写字节,亦即 A-Z, a-z | |
[:digit:] | 代表数字而已,亦即 0-9 | |
[:lower:] | 代表小写字节,亦即 a-z | |
[:upper:] | 代表大写字节,亦即 A-Z | |
[:graph:] | 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键 | |
[:cntrl:] | 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等 | |
[:print:] | 代表任何可以被列印出来的字节 | |
[:punct:] | 代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $... | |
[:blank:] | 代表空白键与 [Tab] 按键两者 | |
[:space:] | 任何会产生空白的字节,包括空白键, [Tab], CR 等等 | |
[:xdigit:] | 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节 | |
grep | grep [-A] [-B] [--color=auto] '搜寻字串' filenam -a :将binary文件以text文件方式搜寻你数据 -c :计算找到’搜寻字符串‘的次数 -i :不区别大小写 -v :方向选择,即显示没有搜寻’字符串‘内容的一行 | |
RE字符 | ^word | 意义:待搜寻的字串(word)在行首! grep -n '!#' regular_express.txt |
work$ | 意义:待搜寻的字串(word)在行尾! grep -n '!$' regular_express.txt | |
. | 意义:代表『一定有一个任意字节』的字符! grep -n 'e.e' regular_express.txt | |
* | 意义:重复零个到无穷多个的前一个 RE 字符 grep -n 'ess*' regular_express.txt | |
\ | 意义:跳脱字符,将特殊符号的特殊意义去除! grep -n \' 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 | |
sed工具 | 用法 | sed [-nefr] [动作] 选项与参数: 动作说明: [n1[,n2]]function function 有底下这些咚咚: |
删除'd' | 将2-5行删除 nl /etc/passwd | sed '2,5d' 只删除一行 nl /etc/passwd | sed '2d' 删除3到最后一行 nl /etc/passwd | sed '3,$d' | |
添加'a' | 在第2行后添加1行并加入“drink tea” nl /etc/passwd | sed '2a drink tea' 在第2行后添加2行 nl /etc/passwd | send '2a drink tea or \ >drink beer' | |
插入'i' | 在第二行前添加一行并加入“drink tea” nl /etc/passwd | sed '2i drink tea' | |
替换‘c’ | 将第2-5行替换成“no 2-5 number” nl /etc/passwd | sed '2,5c no 2-5 number' | |
显示‘p’ | 将2-5行单独显示(注意需要加‘-n’,不然会有重复的数据) nl /etc/passwd | sed -n '2-5p' | |
搜寻取代's' | sed 's/要被取代的字串/新的字符串/g' ifconfig提取eth0的ip地址 ifconfig eth0 | grep "inet addr" | sed 's/^.*addr//g' | sed / 's/Bcast.*$//g' 将文件的每一行结尾若为. 则换成!(加‘-i’直接修文件,否则只输出到终端) sed -i 's/\.$/\!/g' regular_express.txt | |
sed用法、含义和vim差不多,‘d’,'i','a',‘s’等等 |
2、延伸正规表示法
去除空行和行首为#的行列
grep -v '^$' regular_express.txt | grep -v '^#'
使用正规表示法如下
egrep -v '^#|&$' regular_express.txt
RE字符 | + | 意义:重复『一个或一个以上』的前一个 RE 字符 范例:搜寻 (god) (good) (goood)... 等等的字串。 那个 o+ 代表『一个以上的 o 』所以,底下的运行成果会将第 1, 9, 13 行列出来。 egrep -n 'go+d' regular_express.txt |
? | 意义:『零个或一个』的前一个 RE 字符 范例:搜寻 (gd) (god) 这两个字串。 那个 o? 代表『空的或 1 个 o 』所以,上面的运行成果会将第 13, 14 行列出来。 有没有发现到,这两个案例( 'go+d' 与 'go?d' )的结果集合与 'go*d' 相同? 想想看,这是为什么喔! ^_^ egrep -n 'go?d' regular_express.txt | |
| | 意义:用或( or )的方式找出数个字串 范例:搜寻 gd 或 good 这两个字串,注意,是『或』! 所以,第 1,9,14 这三行都可以被列印出来喔!那如果还想要找出 dog 呢? egrep -n 'gd|good' regular_express.txt egrep -n 'gd|good|dog' regular_express.txt | |
() | 意义:用或( or )的方式找出数个字串 范例:搜寻 gd 或 good 这两个字串,注意,是『或』! 所以,第 1,9,14 这三行都可以被列印出来喔!那如果还想要找出 dog 呢? egrep -n 'gd|good' regular_express.txt egrep -n 'gd|good|dog' regular_express.txt | |
()+ | 意义:多个重复群组的判别 范例:将『AxyzxyzxyzxyzC』用 echo 叫出,然后再使用如下的方法搜寻一下! echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C' 上面的例子意思是说,我要找开头是 A 结尾是 C ,中间有一个以上的 "xyz" 字串的意思~ |