正则表达式字符列表:
\ | 转义字符(ex: "\/home\/test\/" 表示"/home/test") |
. | 匹配任意单个字符 (ex: "a.b"可匹配 "aab" "abb" "acb"....) |
* | 匹配在它之前一个字符的任意个数或0个 (ex: "a*b" 可匹配 "ab" "aab" "aab" "aaab"...) |
^ | 在行开头匹配它后面的正则表达式 (ex: "^ab" 表示以ab开头的行) |
$ | 在行末尾匹配它前面的正则表达式 (ex: "ab$"表示以ab结尾的行) |
[a-z]/[A-Z] | 匹配a~z的小写字母或A-Z的大写字母 |
[0-9] | 匹配0~9之间的数字 |
[^....] | 匹配除了^后面的字符 (ex: "[^0-9]"表示匹配除了0~9数字的字符) |
\{n,m\} | 区间表达式,匹配它前面的字符重现n至m次,\{n\}重现n次,\{n,\}至少重现n次(ex: "abc\{4,10\}"表示c字符重复4到10次) |
(xxx) | 用于表示一个子模式,最多可以存储9个独立的子模式在一个模式中。可以用\1至\9指定这9个模式。(ex: "(ab).*\1"匹配一行中出现2次ab)括号前面都要加\斜杠 |
+ | 匹配前面正则表达式的一个或多个实例 (ex: "[0-9]+" 表示至少一个数字) |
? | 匹配前面正则表达式的0个或一个实例 (ex: "[0-9]?"表示0个或1个数字) |
| | 匹配|号前面或后面的正则表达式 (ex: "ab|cd"表示出现ab或cd的行) |
.* | .*可以表示任意数量的任意字符 (ex: "([\'\"]).*\1" 表示匹配用单引号或双引号括起来的字符串) |
^$ | 表示空行 |
特殊字符集:
[:alnum:] | 字母和数字alpha+num | [:graph:] | 非空格字符 |
[:alpha:] | 字母字符 | [:lower:] | 小写字母 |
[:blank:] | 空格与tab字符 | [:print:] | 可显示的字符 |
[:cntrl:] | 控制字符 | [:punct:] | 标点符号 |
[:digit:] | 数字字符 | [:space:] | 空白字符 |
[:xdigit:] | 十六进制数字 | [:upper:] | 大写字母 |
一,grep/egrep (grep -E)命令:
grep -ri "abc" 在当前目录下递归查找包含abc(忽略大小写)的文件
二,sed命令:
(1)替换:
sed 's/old/new/g' test.txt 将test.txt文件中old全局(g)替换为new
sed -e 's/abc/def/g' -e 's/hij/klm/g' test.txt 连续执行两次替换命令
sed '/abc/!s/def/abc/g' test.txt 将没有abc的行的def替换为abc
pwd | sed 's;\/;\\;g' sed也可以用其他符合作为分隔符,将当前目录的/变为\ (/home/abc/ ==> \home\abc\)
(2) 打印:
sed -n '/abc/, /def/'p test.txt 打印有abc的行到有def行之间的所有行
sed -n '10,20p' test.txt 打印10到20行的内容
sed -n '/abc/p' test.txt 打印包含abc的行
(3)删除
sed '/^$/d' test.txt 删除空行
补充:
\u | 把首字母转化为大写 |
\l | 把首字母转化为小写 |
\U | 把字符串转化为大写 |
\L | 把字符串转化为小写 |
\b | 匹配一个单词边界,单词与空格间的位置
|
& | 表示前面正则表达式匹配的内容 (ex: sed 's/abc/&def/' 将abc替换为abcdef) |
例子:
sed 's/\b[a-z]/\u&/g' 将每个单词的首字母转化为大写
三,awk命令:
awk -F: '{print $1, print $3}' test.txt 打印test.txt每行以冒号为分隔的第一和第三字段
awk -F: '{printf "%s size is %s\n", $3, $1}'
awk -F: '/abc/{print $1}' 首先筛选包含abc的行然后打印第一字段内容