一、正则表达式
正则表达式:是一类字符所书写出的模式(pattern)
元字符:类似通配符,不表示字符本身的意义,用于额外功能性的描述
基本正则表达式(BRE)和扩展正则表达式(ERE)
基本正则元字符:
字符匹配:
. : 任意单个字符
[] : 指定范围内的任意单个字符
[^] : 指定范围外的任意单个字符
[0-9],[:digit:] : 数字
[a-z],[:lower:] : 小写字母
[A-Z],[:upper:] : 大写字母
[:alpha:] : 大小写字母
[:alnum:] : 字母+数字
[:space:] : 空格
[:putct:] : 标点符号
匹配次数:
* : 匹配前一个字符的任意次(包括0次)
.* : 匹配任意长度的任意次
\? : 0次或1次
\+ : 至少1次
\{n\} : n次
\{n,\} : 至少n次
\{,n\} : 至多n次
\{n,x\} : 至少n次至多x次
位置锚定:
^ : 锚定行首
$ : 锚定行尾
^$ : 表示空行
^[[:space:]]*$ : 空白行
\<,\b : 锚定词首
\>,\b : 锚定词尾
分组:
\(\)
引用:
\1:后向引用,引用第一个括号左匹配到的字符串。1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.
扩展正则表达式:
字符匹配:
. : 任意单个字符
[] : 指定范围内的任意单个字符
[^] : 指定范围外的任意单个字符
匹配次数:
* : 匹配前一个字符的任意次(包括0次)
.* : 匹配任意长度的任意次
? : 0次或1次
+ : 至少1次
{n} : n次
{n,}: 至少n次
{,n} : 至多n次
{n,x} : 至少n次至多x次
位置锚定:
^ : 锚定行首
$ : 锚定行尾
^$ : 表示空行
^[[:space:]]*$ : 空白行
\<,\b : 锚定词首
\>,\b : 锚定词尾
分组:
()
引用:
\1:后向引用,引用第一个括号左匹配到的字符串。
或:
ac|bc : ac或者bc1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.
二、文本处理命令
grep : 文本过滤
grep [option] file
选项:
-v : 取反
-i : 忽略大小写
-n : 显示匹配行的行号
-c : 统计匹配的行数
-q : 静默模式,不输出任何信息
-o : 仅显示匹配到的字符串
-A n : 匹配搜索到的字符串的后n行
-B n :匹配搜索到的字符串的前n行
-C n :匹配搜索到的字符串的前后n行
-e :实现多个选项间的逻辑or关系
grep -e 'str0' -e 'str1' file
-w : 匹配整个单词
-E : 支持扩展正则表达式1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.
wc : 统计文件
wc [option] file
选项:
-l :行数
-w :单词数
-c :字节数
-m :字符数
-L :最长行的字符数1.2.3.4.5.6.7.
sort : 排序
选项
-t : 指定分隔符
-k : 指定以第N列进行排序
-n : 以数字大小排序
-r : 倒序排序
-u : 去除重复行1.2.3.4.5.6.
uniq :去除文件中相邻的重复行
选项:
-c :显示每行重复出现的次数
-d : 仅显示重复过的行
-u : 仅显示不曾重复的行1.2.3.4.
cat : 查看文件内容
cat [options] file
选项:
-n : 显示行号
-b : 显示行号,空行不显示行号
-E : 显示结束符 $
-A : 显示所有特殊符号
-s : 将连续空行压缩成一行
tac :反向显示
rev : 反向显示字符串,abc > cba
nl : 显示行号,空行不添加行号
more : 分页显示,不能向前翻页
more [option] file
选项:
+n : 从第n行开始显示
-n : 每次显示n行数据
-c :清屏再现实
-p : 换页时清屏
less : 分页显示,不自动退出
-N : 显示行号
查看文件时:
/str : 向下搜索字符串
?str : 向上搜索字符串
head : 显示文件的前几行
-c n : 取字符的前n个
tail : 显示文件的后几行
-f : 实时显示
-F : 跟踪文件名
tailf :类似tail -f,当文件不增长时不访问文件,减少磁盘I/O
cut:显示行中的指定部分,删除文件中指定字段。
-d : 指定分隔符
-f : 与-d一起使用,显示第n列
-c : 按字符切割
paste :合并两个文件相同行号的行到一行
-d :指定分隔符,默认用TAB
-s :所有行合并成一行显示
AWK简介:awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入, 以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理;awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的GNU版本。
(1)域分隔符:awk在没有使用-F指定分割符时,默认以空格为分割符;
域分割
$0代表文本内容全文显示;
$1 代表分割第一个域;
$2 代表分割第二个域;
......
awk -F: 分割符为‘:’
eg: cat /etc/passwd | awk -F: '{print $1,$2}'
(2) 打印报告头
eg:
cat /etc/passwd | awk -F: 'BEGIN{print "This is system user"}{print $1}' | more
打印结尾:
eg:
cat /etc/passwd |awk -F: 'BEGIN{print "==============="}{print $1}END{print "=========="}' |more
(3) awk 中的正则表达式:
1>匹配 ~ eg:cat /etc/passwd |awk -F: '{if($1~/root/) print $0}'
2>精确匹配: eg: cat /etc/passwd | awk -F: '$1=="root"{print $0}'
3> 不匹配: eg: cat /etc/passwd |awk '{if($1!~/root/) print $0}'
4>小于,小于或等于: eg: cat /etc/passwd | awk -F: '{if($3<200) print $3}'
5>大于,大于或等于: eg: cat /etc/passwd | awk -F: '{if($3>500) print $3}'
6> 匹配多个关键字: eg: cat /etc/passwd | awk -F: '$1 ~ /(root|user)/ {print $0}'
7> 匹配行首: eg: cat /etc/passwd |awk -F: '{if($1~/^root/) print $0}'
8> awk 使用 && || eg: cat /etc/passwd | awk -F: '{if($1=="root" && $5=="root") print $0}'
(4) awk 中的NF与NR:
NF:浏览记录的域的个数(统计列的段数)
NR:统计列的行号
eg:
cat test |awk -F: ‘{print NF}’ 输出一共有多少列
cat test |awk -F: ‘{print NF,NR}’ 输出一共有多少列及其行号
cat test |awk -F: ‘{print NR,$0}’ 输出全部内容,并在其前输出行号
awk '{if(NR<10 && $1~/root/) print $1}' /etc/passwd 行号小于10的,使用$1匹配root关键字
cat /etc/passwd | awk -F: '{print $NF}' 打印每段的最后一段*
(5)awk替换:
eg:
cat /etc/passwd | awk 'gsub(/root/,"alvinzeng") '
将文中所有的root替换成alvinzeng,并输出了所有匹配的行