Linux正则和grep命令
设置命令的默认参数和别名
- 每次都要输入
ls -l
,烦不烦,我想用ll
来表示ls -l
, 可以,只要在~/.bashrc
中加上alias ll='ls -l'
,然后运行source ~/.bashrc
来使配置立即生效即可。
正则表达式
- 正则表达式就是有规则的字符串,字符串中有一些特殊字符来表示一定的规则,符合这个规则的字符串就能被匹配上。 如
^the
表示每一行都以the开头的字符串;^[^a-zA-Z]
表示所有不以英文字母开头的行。
元字符
- 所谓元字符,就是这个字符是代表一类字符或这代表某种规则。
.
对,就是小数点,它代表除换行符外的任意一个字符,注意是一个字符。\w
匹配字母数字下划线和汉子。注意也是匹配一个字符。\s
匹配任意一个空白符。\d
匹配任意一个数字。\b
匹配单词的开头或结尾^
匹配行首。$
匹配行尾。[^x]
匹配任意不是x的字符。[^xyz]
匹配任意不是x,y,z的字符。- 另外linux中大写字母一般表示小写字母的相反意义,上面的 w, s, d, b分别有对应的 W, S, D ,B 分别表示它们的相反意思。
数量及各种括号
*
放在一个字符的后面,表示前面的字符可以出现0次或多次。?
同上,但是表示前面的字符可以出现0次或1次。+
同上,但是代表前面的字符可以出现1次或多次。()
小括号,里面的看作一个整体,也就是看作一个"字符",*,? + 等修饰整个小括号里面的内容。[]
中括号,不论里面有多少字符,它仅表示一个字符,如 [abc] 表示字符a 或 字符b或字符c。{}
大括号,修饰前面的一个字符,表示该字符出现多少次,如 {2} 表示除2次,{3,} 表示出现3或3次以上,{3,9} 表示出现次数在3到9之间,包括3和9. 注意{
和}
前要加转义符。|
或,如abc \| cde
,匹配包含 abc 或 cde的行。注意|
之前要加转义符。
grep
- grep: global search regular expression (RE). 一种可使用正则进行文本搜索的工具,并把匹配的行打印出来。
示例
-
将 /etc/passwd 没有出现 root 的行取出来 :
grep -v /etc/passwd
-v
参数就表示相反的意思。 -
在当前目录及子目录下递归搜索行内有 "important" 的文件 :
grep -r 'important' *
-
在当前目录及子目录下递归搜索行内有 "important" 的文件,但仅显示文件名 :
grep -l -r 'important' *
-
搜寻包含 test 或 tast 的行并显示行号 :
grep -n 't[ae]st' test.txt
-
搜索包含 aa 但是 aa 前面不能是 b 的行:
grep '[^b]aa'
-
搜索所有包含 hi并且hi前面不是小写字母的行:
grep [^a-z]hi txt3
-
搜索包含数字的行:
grep -n '[0-9]' txt3
-
搜索行首是The的行:
grep -n '^The' txt3
-
搜索行首第一个字母是小写的行:
grep -n '^[a-z]' txt3
-
搜索行首第一个字符不是字母的行:
grep -n '^[^a-zA-Z]' txt3
-
搜索行尾为小数点的行:
grep -n '\.$' txt3
因为小数点是元字符,所以加了转移字符反斜杠。 -
以
good.
结尾的行:grep -n 'good.$' txt3
-
找出类似
g??d
的行:grep -n 'g..d' txt3
-
找出 g后面跟2个或2个以上o的行:
grep -n 'go\{2,\}' txt3
注意大括号要前要加转义符。
egrep 对grep的增强,支持扩展的表达式
- 搜索所有包含 CN 或 US的行:
egrep -n 'CN|US' txt3
|
就是扩展的元字符, - 如果使用grep时在扩展的元字符前加反斜杠,grep会自动使用egrep. 如上面的也可写成:
grep -n 'CN\|US' txt3
- 搜索所有包含1个或多个3的行:
egrep -n 'o+' txt3
- 搜索所有包含1个或多个go的行:
egrep -n '(go)+' txt3
fgrep,查询速度比grep快,但不会识别正则表达式,只会原样搜索字符串。
- 搜索包含
**
的行:fgrep -n '**' txt3
作者:imap
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.