dcddc

西米大人的博客

0%

正则表达式

正则表达式用于匹配字符串。通配符*是bash提供的接口,并非正则表达式!
支持正则表达式的工具:vi\grep\awk\sed

grep

示例:dmesg | grep -n -A3 -B2 --color=auto 'eth'
-A3即 after3,-B2即before 2,会将匹配行前两行和后三行也显示出来。
-n添加行号,–color=auto会高亮匹配字符串

有些grep参数例如-n –color=auto是很常用的,如果不想每次都敲一遍,到~/.bashrc中增加别名即可:
alias grep='grep -n --color=auto',再使其生效:source ~/.bashrc

如果你想获取不包含匹配的结果,使用:grep -vn 'the' test.txt

如果你想匹配时忽略大小写,使用grep -in 'the' test.txt

如果要匹配集合内的单个字符,使用:grep -n 't[ae]st' test.txt

[]内可以是一个集合,也可以是用-连接的范围,但[]只占一个字符

如果要匹配开头不包含某个字符的字符串,使用:grep -n '[^g]oo' test.txt

如果要匹配开头不包含小写字母的字符串,使用:grep -n '[^a-z]oo' test.txt

如果要匹配以小写字母开头的字符串,使用:grep -n '^[a-z]' test.txt

^放到[]外面表示开头,放到[]里表示不包含

如果要匹配以指定字符结尾的字符串,使用:grep -n '\.$' test.txt

$的含义:linux的断行符是$,即$一定出现在行尾,同理^一定出现在行首
因为小数点具有其他含义,所以要转义

如果要过滤空行,使用:grep -vn '^$' test.txt

如果要匹配两个任意字符,使用:grep -n '..' test.txt

如果要匹配包含任意个(一个或一个以上)连续字符o的字符串,使用:grep -n 'oo*' test.txt

.表示任意一个字符(非空,但可以是空格符),*表示匹配前一个出现的字符任意次(可以为0次)

如果要匹配包含指定连续个数的字符o的字符串,使用:
grep -n 'o\{2\}' test.txt 匹配包含连续两个o的字符串
grep -n 'o\{2,5\}' test.txt 匹配包含连续2到5字o的字符串
grep -n 'o\{2,\}' test.txt 匹配包含大于等于连续两个o的字符串

sed

如果要删除指定第三行到最后一行,使用:nl /etc/passwd | sed '3,$d'

如果要在指定行后增加内容,使用:nl /etc/passwd | sed '2a yourText'

如果在指定行前增加内容,使用2i替代2a
如果增加多行内容,每行内容用\分割

如果要用新的内容取代指定(多)行的内容,使用:nl /etc/passwd | sed '2,5c yourText'