正则表达式--grep的进阶练习
本帖最后由 Zbrel 于 2017-8-30 20:55 编辑grep的进阶选项
grep [-A] [-B] [--color=auto] ‘搜寻字符串’ filename
-A 后面可加数字,为after的意思,除了列出该行外,后续的n行也列出来;
-B 后面可加数字,为before的意思,除了列出该行外,前面的n行业列出来;
--color=auto 可将正确的那个撷取数据列出颜色
例如:用dmesg列出核心讯息,再以grep找出内含eth的行:dmesg|grep ‘eth’
将上例中捕捉到的关键词显色,且加上行号来表示:dmesg|grep -n --color=auto ‘eth’
将上题中关键词所在行的前两行和后三行一起显示:
dmesg|grep -n -A3 -B2 --color=auto ‘eth’
基础正则表达式练习
1.搜寻指定字符串
① 从档案1.txt中取得the这个字符串并显示行号:grep -n ‘the’1.txt
② 反向选择,显示没有the的行:grep -vn ‘the’1.txt
③ 取得不论大小写的the的行:grep -in ‘the’1.txt
2.利用中括号[]来搜寻集合字符
① 如果想要搜寻test或taste这两个字符串时,可以发现,它们有共同的‘t?st’,因此可以这样来搜寻:grep -n ‘tst’ 1.txt ,[]里面不论有几个字符,它都仅代表一个字符。
② 搜寻有oo的字符,但不想要oo前面有g,可以利用反向选择^来达成:
grep -n ‘[^g]oo’ 1.txt
③ oo前面不想要有小写字符:
grep -n ‘[^a-z]oo’ 1.txt 或grep -n ‘[^[:lower:]]oo’ 1.txt
④ 取有数字的那一行:grep -n ‘’ 1.txt或grep -n ‘[[:digit:]]’ 1.txt
3.行首与行尾字符^$
① 只想要出现在行首的the:grep -n ‘^the’ 1.txt
② 想要列出开头是小写字符的行:
grep -n ‘^’ 1.txt或grep -n ‘^[[:lower:]]’ 1.txt
③ 不想要开头是英文字母:
grep -n ‘^[^a-zA-Z]’ 1.txt或grep -n ‘^[^[:alpha:]]’ 1.txt
注意哦,^符合在字符集结符合[]之内与之外是不同的,在[]内表示反向选择,在[]之外表示定位在行首。
④ 想要找出行尾结束为小数点(.)的那一行:grep -n ‘\.$’ 1.txt
因为小数点具有其他意义,所以必须要使用跳脱字符(\)来解除其特殊意义
⑤ 想要找出空白行,即该行没有输入任何数据:grep -n ‘^$’ 1.txt
因为只有行首和行尾,所以这样就找出空白行了。
⑥ 不想要空白行与开头为#的批注行:grep -v ‘^&’ 1.txt|grep -v ‘^#’
-v ‘^&’表示不要空白行;-v ‘^#’表示不要开头是#的行。
4.任意一个字符.与重复字符*
小数点(.)表示一定有一个任意字符;
星号(*)表示重复前面字符0次到无穷多次,为组合形态
① 需要找出4个字符,开头是g而结束是d的字符串:grep -n ‘g..d’ 1.txt
② o*表示拥有空字符或一个 o 以上的字符,因为允许空字符,因为将会把所有的数据都打印到屏幕上;oo*即凡是含o都可以被列出来;ooo*表示至少两个o以上的字符串才会被列出来;想要字符串开头与结尾都是g,但是两个g之间仅能存在至少一个o:
grep -n ‘goo*g’1.txt
③ 想要找出g开头与g结尾的字符串,当中的字符可有可无:grep -n ‘g.*g’1.txt
因为 * 可以是 0或多个重复前面的字符,而 . 是任意字符,所以 .* 就代表零个或多个任意字符。
④ 想要找出任意数字的行:
grep -n ‘*’ 1.txt或grep -n ‘’ 1.txt
5.限定连续RE(Regular Expression的简称,即正则表达式)字符范围{}
可以利用 . 与 RE 字符及 * 来设定 0 个到无限多个重复字符,但是如果只需要找出2-5个o的连续字符串呢?这是就可以使用限定范围的字符{}了。由于{与}在shell具有特殊意义,因此必须使用跳脱字符\来让它失去特殊意义才行。
① 找到两个o的字符串:grep -n ‘o\{2\}’ 1.txt
② 找出g后面接2-5个o,然后再接一个g的字符串:grep -n ‘go\{2,5\}g’ 1.txt
③ 找到至少两个o的字符串:grep -n ‘o\{2,\}’ 1.txt
页:
[1]