正则表示法:处理字符串的方法,是以行为单位来进行字符串的处理行为,透过一些特殊符号的辅助,可以让使用者轻易的达到『搜寻/删除/替代』某特定字符串的处理程序!
正则表示法的字符串表示:基础正则表示法和延伸正则表示法
通配符 (wildcard) 代表�m是 bash 操作接口的一个功能』,但正则表示法则是一种字符串处理的表示方式。
grep [-A] [-B] [--color=auto] '搜寻字符串' filename
-A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出;
-B :后面可加数字,为 befer �m意思,除了列出该行外,前面的 n 行也列出;
--color=auto 可将正确�m那个数据列出颜色
-n :number,列出行号
~/.bashrc 内加上这行『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效�p可,这样每次执行 grep 他都会自动加上颜色。
语系使用『 export LANG=C 』的设定值;
例题一、搜寻特定字符串
grep -n 'the' regular_express.txt
grep -vn 'the' regular_express.txt 反向选择
grep -in 'the' regular_express.txt不论大小写
例题二、利用中括号 [] 搜寻集合字符
grep -n 't[ae]st' regular_express.txt
grep -n '[^g]oo' regular_express.txt
oo 前面不想要有小写字符,可以这样写[^abcd....z]oo , 但是这样似乎不怎么方便,由于小写字符的 ASCII 上编码的顺序是连续的,因此简化为底下这样
grep -n '[^a-z]oo' regular_express.txt
例题三、行首与行尾字符 ^ $
grep -n '^[^a-zA-Z]' regular_express.txt
^ 符号,在字符集合符号(括号[])内与外是不同的! 在 [] 内代表『反向选择』,在 [] 外则代表定位在行首的意义!
grep -n '\.$' regular_express.txt要找出行尾结束为小数点 (.) 那一行
跳脱字符(\)来加以解除其特殊意义
(^$),这样就可以找出空白行
例题四、任意一个字符 . 不重复字符 *
. (小数点):代表『一定有一个任意字符』
* (星星号):代表『重复前一个 0 到无穷多次』为组合形态
至少两个 o 以上的字符串时,就需要 ooo*
例题五、限定连续 RE 字符范围 {}
找出两个到五个 o 的连续字符串,要使用到限定范中的字符 {} 了。 但因为 { 和 } �m符号在shell 是有特殊意义,要使用跳脱字符 \ 失去特殊意义才
grep -n 'go\{2,5\}g' regular_express.txt
找出 g 后面接 2 到 5 个 o ,然后再接一个 g 的字符串
2 个 o 以上的 goooo....g
grep -n 'go\{2,\}g' regular_express.txt
『正则表示法的特殊字符』与一般在指令列输入指令的『通配符』并不相同, 例如,在通配符当中�m * 代表的是『 0 ~ 无限多个字符』的意思,但是在正则表示法当中, * 则是『重复 0 到无穷多个的前一个 RE 字符』
**************************************
sed工具
sed 本身也是一个管线命令,将数据进行取代、删除、新增、截取特定行等等的功能
sed [-nefr] [动作]
-n :使用安静(silent)模式。只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在指令列模式上进行 sed �m动作编辑;
-f :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r :sed 的动作支持的是延伸型正则表示法的语法。
-i :直接修改读取�m档案内容,而不是由屏幕输出。
动作说明: [n1,[n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行间进行的,则『 10,20[动作行为] 』
function 有底下这些:
a :新增,a 的后面可以接字符串,而这些字符串会在新一行出现(目前的下一行)~
c :取代,c �m后面可以接字符串,这些字符串可以取代 n1,n2 间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何;
i:插入,i后面可以接字符串,而这些字符串会在新�m一行出现(目前�m上一行);
p:打印,亦�p将某个选择�m数据印出。通常 p 会不参数 sed -n 一起运作~
s :取代,可以直接进行取代�m工作哩!通常这个 s �m动作可以搭配正则表示法!1,20s/old/new/g 就是啦!