正则表达式
1.正则表达式的特殊符号: [:alnum:]代表英文大小写字母及数字 [:alpha:]代表英文大小写字母 [:blank:]代表空格和 tab 键 [:cntrl:]键盘上的控制按键,如CR,LF,TAB,DEL [:digit:]代表数字 [:graph:]代表空白字符以外的其他 [:lower:]小写字母 [:print:]可以被打印出来的任何字符 [:punct:]代表标点符号 [:upper:]代表大写字符 [:space:]任何会产生空白的字符如空格,tab,CR 等 [:xdigit:]代表 16 进位的数字类型 示例:grep –n ‘[[:lower:]]’ one.txt 2.查找特定的字符串: -a :将 binary 档案以 text 档案的方式搜寻数据 -c :计算找到 '搜寻字符串' 的次数 -i :忽略大小写的不同,所以大小写视为相同 -n :顺便输出行号 -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行! 示例:grep –niv ‘the’ one.txt 意思是查找one.txt文本中当该行没有“the”字符时才显示在屏幕上(-v反向查找),且忽略the字符的大小写(-i),且列出行号(-n) 3.字符组 [^…]表示排除后面的字符。 [abc] :表示“a”或“b”或“c” [0-9] :表示 0~9 中任意一个数字,等价于[0123456789] [u4e00-u9fa5] : 表示任意一个汉字 [^a1<] :表示除“a”、“1”、“<”外的其它任意一个字符 [^a-z] : 表示除小写字母外的任意一个字符 示例:grep –n ‘t[ae]st’ one.txt 查找test字符串或者tast字符串并列出行号 grep –n ‘^#’ one.txt 显示#字符为行首所在的一行且列出行号 grep -n ‘^[A-Z]’one.txt 查找以大写字母为行首的行并列出行号 grep –n ‘[^A-Z]’ one.txt 查找除了大写字母A-Z以外的所有字符并列出行号 grep –n ‘[A-Z]$’ one.txt 查找以大写字母A-Z为结尾的所有字符并列出行号 grep –n ‘[^#]’ one.txt 显示文本所有字符串,唯独#字符高亮异色显示且列出行号 grep –n ‘[^g]oog’ one.txt 查找oog的字符串且列出行号 grep –n ‘[^go]oog’ one.txt 查找oog的字符且前面不能有g或者o的字符并列出行号 grep –n ‘^$’ ont.txt 查找空行 grep –v ‘^$’ ont.txt | grep –vn ‘^#’ 过滤掉文本中的空行和注释行并列出过滤后显示出来的所有字符串行号,这里的n可以加载前面-v后面也可以加在后面的-v后面,或者任选其一都可以,最够的结果显示都是一样的,不同是的两种结果后行号的高亮显示,加在最后相对要好点。 4.任意字符: $ grep -n 'a.ou.' one.txt 其中“.”代表任意一个字符且一个小数点只能代表一个字符,本句的意思为查找以a开头,第二位和最后一位为任意字符,第三位是o字符,第四位是u字符的字符串。 *(星号):代表重复前面 0 个或者多个字符。 e*:表示具有空字符或者一个以上 e 字符。 ee*,表示前面的第一个 e 字符必须存在。第二个 e 则可以是 0 个或者多个 e 字符。 eee*,表示前面两个 e 字符必须存在。第三个 e 则可以是 0 个或者多个 e 字符。 ee*e :表示前面的第一个与第三个 e 字符必须存在。第二个 e 则可以是 0 个或者多个 e 字符。 5.限定连续字符范围: grep –n ‘o{2}’ ont.txt相当于 grep –n ‘ooo*’ont.txt 前面是限定o的连续字符数为2个,因为{}在linux的shell中有特殊意义,所以这里需要用到转移字符“” grep –n ‘go{2,5}g’ one.txt 查找g后面接2到5个o的字符,然后再接g的字符。 5.总结: ^word表示带搜寻的字符串(word)在行首 word$表示带搜寻的字符串(word)在行尾 .(小数点) 表示 1 个任意字符 表示转义字符,在特殊字符前加会将特殊字符意义去除 *表示重复 0 到无穷多个前一个 RE(正则表达式)字符 [list]表示搜索含有 list 的字符串 [n1-n2]表示搜索指定的字符串范围,例如[0-9] [a-z] [A-Z]等 [^list]表示反向字符串的范围,例如[0-9]表示非数字字符,[A-Z]表示非大写字符范围 {n,m}表示找出 n 到 m 个前一个 RE 字符 {n,}表示 n 个以上的前一个 RE 字符 6.正则表达式下的sed工具命令: sed 是非交互式的编辑器。它不会修改文件,除非使用 shell 重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。 sed 编辑器逐行处理文件(或输入),并将结果发送到屏幕。 具体过程如下: 首先 sed 把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed 每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed 便结束运行。sed 把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。 如果要修改原文件,可使用-i选项。 $ one.txt | sed '2,5d' 列出one.txt的所有行带上行号,并删除第二到第五的显示, 如果要变为真实修改,只需要在参数前面加上-i即可。(d表示删除) 例如:$ sed –i '2,5d' /home/test/one.txt 即删除one.txt文本的第二道第五行。 $ nl one.txt | sed '3,$d' 删除第三行以后的所有行到$定位的最后一行,显示剩余行。 当然有删除就有添加:a表示在行后添加字符串,i表示在行前添加字符串 $ nl one.txt | sed ‘2a share’表示在ont.txt的文本中第二行后添加share的字符串 $ nl one.txt | sed ‘2i share’ 表示在ont.txt的文本中第二行之前添加share的字符串 $ nl one.txt | sed ‘6a sharenshare’ 表示在6行后面添加两行share字符串,n表示换行 替换:c 表示替换 $ nl replace.txt | sed ‘2,3c replace’ 表示将第二到第三行替换为replace 列出replace.txt内的第2-5行: $ nl replace.txt | sed '2,5p' $ nl replace.txt | sed –n ‘2,5p’ 而-n表示静默模式
7.替换字符串 Sed ‘s/被替换的字符串/新字符串/g’ # /sbin/ifconfig eth1 | grep 'inet ' 在/sbin/ifconfig eth1的结果中查找’inet’,打印到终端 # /sbin/ifconfig eth1 | grep 'inet ' | sed's/.inet...://g' # /sbin/ifconfig eth1 | grep 'inet ' | sed's/.{0,9}://g' 将IP前面的部分予以删除 $ /sbin/ifconfig eth0 |grep 'inet '| sed's/.inet...://g'| sed 's/..:.*$//g 将IP后面的部分予以删除(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |