标签:
正则表达式的语法:
.一点代表一个字符 . 代表任意的字符。 例1:样式 .T. ,代表3 个字符,中间是T,左右两边是任意的一个字符。 例2:... 代表字符长度是3 的字符串。若想比对 . 这个字符本身,需加上转义字符(\),写成\.。 例如:样式data\....代表data.后接3 个字符,如data.txt、data.cfg、data.123 等,都符合这个样 式,但data1234 就不符合了,因为4 个点最左边的那个点,已经用\转义其特殊意义,还原为. 这个字符本身,因此,\....和1234 比对不符。
^ 在行首 ^ 代表位置在行的开头。 例如:样式 ^Jack,代表Jack 应出现在行首,才算符合样式。像Jack and Marry 123 就 符合此样式,但Hi Jack 就不符合,因为Jack 没有出现在该行的最前面。
$在尾部 13 $代表位置在行的最后面。 例如:样式123$,代表在行的最后面是123。像Jack and Marry 123 即符合此样式。
[...] 字符集合 [...] 代表字符串行中的一个字符(长度为1 个字符)。 例1:样式 [ABc],代表A 或B 或c 这3 个字符中的一个。 例2:[Ss]ame 代表Same 或same。 以下是常见的用法: [A-Z] 一个大写字母 [a-z] 一个小写字母 [0-9] 一个数字 [^A-Z] 除了大写字母之外的一个字符 [^a-zA-Z] 一个非英文字母的字符 [^a-zA-Z0-9] 一个非英文字母、且非数字的字符
^ 出现在括号里的第一个位置,代表“非/不是”之意。
* 出现0 个以上 * 代表前面的(左邻)字符有0 个或0 个以上。 例如:样式aA*c,代表A 这个字符可能出现0 个或0 个以上。例如:ac、aAc、aAAc、 aAAAc 都符合此样式。
\{...\} 指定符合的个数 指定前面的(左邻)字符的个数。 例如:\{3,5\} 表示前面的字符有3~5 个。[a-z]\{3,5\}代表以小写字母组成的字符串,长 度是3~5。
\(...\) 把比对符合的字符串暂时保存起来 例如:H\(...\)y 表示要保存H 和y 之间的3 个字符。 若要提取保存的字符串,可用位置参数,\1 代表第一个保存的字符串,\2 代表第二个, 其他类推。
sed 的用法
sed 的语法如下:
sed ‘样式命令‘ 文件
它的意思是说:如果文件中某一行符合“样式”,就执行指定的sed 命令,如删除(d)或取代(s)。这里的“样式”使用一对//含括,表示寻找之意;也可以指定数据行的范围,例如:1,6表示作用范围是由第1 行到第6 行;/AAA/,/DDD/表示作用范围是从含有 AAA 的数据行,到含有DDD 的数据行。
请特别注意:sed 并不会更改文件内容。sed 的工作方式是读取文件内容,经流编辑之后,把结果显示到标准输出。因此,如果想要存储sed 的处理结果,得自行运用转向输出将结果存成其他文件。
sed 的各种用法:
?? sed 的用法1:删除某一段范围的数据行。 sed ‘1,4d‘ dataf1 把第1 到第4 行数据删除,剩下的显示出来。d 是sed 的删除命令。
?? sed 的用法2:把含有“样式”的数据行删除。 sed ‘/La/d‘ dataf3 把含有La 的行删除,剩下的显示出来。其中,/ / 代表搜索之意。 sed ‘/[0-9]\{3\}/d‘ dataf3 把含有“3 位数”的行删除,剩下的显示出来。 在样式[0-9]\{3\}中,\{3\} 表/ /要寻找的是3 个数字组成的字符串。 sed ‘/^$/d‘ dataf5 删除dataf5 的空白行。^ 表开头,$ 表尾部,这两者之间没有任何字符,代表该行是一 空白行。
?? sed 的用法3:把不含有“样式”的数据行删除。 sed ‘/La/!d‘ dataf3 把不含有La 的行删除,剩下的显示出来。 这里的!是否定的意思,表示不符合样式者。
?? sed 的用法4:把含有“样式”的数据行显示出来。 sed ‘/La/p‘ dataf3 把含有La 的行显示出来。其中,p 是sed 的命令,它会把目前的数据显示出来, 但因为sed 默认也会显示不符合的数据行,所以,应改用以下指令: sed -n ‘/La/p‘ dataf3 选项-n 会抑制sed 显示出其他资料行的默认操作,只显示符合样式的数据行。
?? sed 的用法5:取代。 sed -n ‘s/La/Oo/p‘ dataf3 这里的s 是取代的意思,第一对//中含括的字符串(La)是搜索的目标,第二对//含 括的是置换的字符串(Oo)。它会把数据行中的字符串La 换成Oo。 请注意:上面这个指令,只会更换第一个出现的La 而已,如要全部置换,应再加上全 局的命令g,如下所示: sed -n ‘s/La/Oo/gp‘ dataf3 这样就会把所有找到的La 全换成Oo 了。 取代的用法,还有以下几个: sed -n ‘s/La//p‘ dataf3 把每一行第一个出现的La 删除(把La 置换成空字符串,就是删除)。 sed ‘s/^...//‘ dataf3 把每一行开头的3 个字符删除。 sed ‘s/...$//‘ dataf3 把每一行末尾3 个字符删除。
?? sed 的用法6:取用符合样式的字符串。 sed -n ‘s/\(La\)/\1Oo/p‘ dataf3 把找到的La 存起来,用\1 取回来再使用。 这个指令作用的结果:若数据行含有La 字符串,则第一个出现的La 会置换成LaOo, 然后再显示这些含有La 的数据行。
?? sed 的用法7:找到符合样式的数据行后,再进行取代的操作。 sed -n ‘/AAA/s/234/567/p‘ dataf3 找到含有AAA 的那一行之后,将234 换成567。 sed -n ‘/AAA/,/DDD/s/B/567/p‘ dataf3 将含有AAA 到含有DDD 的那几行,皆将其中的B 换成567。 sed -n ‘2,4s/B/567/p‘ dataf3 由第2 行到第4 行,皆将其中的B 换成567。 由以上的说明可知:sed 动态编辑的威力是相当强大的,它补足了Bash 在修改文件方面 能力的不足。
标签:
原文地址:http://www.cnblogs.com/txqz/p/4910539.html