正则表达式
元字符
代码 | 说明 |
---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思 |
$ | 匹配字符串的结束 |
限定字符
代码/语法 | 说明 |
---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
转义字符
遇到要使用元字符的情况,这个时候就需要进行字符转义,如元字符 . * \ 需要转换为\. \* \\
常用正则
- 只能输入数字:^[0-9]*$
- 只能输入N位数字:^[0-9]{n}$
- 只能输入至少N位数字:^[0-9]{n,}$
- 只能输入m到n位数字:^[0-9]{m,n}$
- 只能输入0和非0开头的数字:^(0|[1-9][0-9]*)$
- 只能输入有2位小数的正实数:^(0|[1-9][0-9]*)\.[0-9]{2}$ (^[0-9]+(.[0-9]{2})?$)
- 只能输入有1-3位小数的正实数:^(0|[1-9][0-9]*)\.[0-9]{1,3}$ (^[0-9]+(.[0-9]{1,3})?$)
- 只能输入非0的正整数:^\+?[1-9][0-9]*$
- 只能输入非0的负整数:^\-[1-9][0-9]*$
- 只能输入长度为3的字符:^\w{3}$ (^.{3}$)
- 只能输入由26个英文字母组成的字符串:^[A-Za-z]+$
- 只能输入由26个大写英文字母组成的字符串:^[A-Z]+$
- 只能输入数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
- 只能输入由数字、26个英文字母或者下划线组成的字符串:^\w+$
- 验证密码,以字母开头,长度在6~18之间,只能包含字符、数字和下划线:^[A-Za-z]\w{5,17}$
sed(Stream Editor)
- sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会直接修改原文件
- sed常见的语法格式有两种,一种叫命令行模式,另一种叫脚本模式
- sed [options] ‘处理动作’ 文件名
常用选项
选项 | 说明 | 备注 |
-e | 进行多项(多次)编辑 | 可以编辑多个匹配参数 |
-n | 使用安静模式,取消默认输出 | 在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed特殊处理的行 |
-r | 使用扩展正则表达式 | |
-i | 原地编辑 | 会修改源文件,不在屏幕上输出 |
-f | 指定一个 sed 脚本文件到命令行执行 | |
常用处理动作
动作 | 说明 | 备注 |
a | 在指定行之后插入内容 | |
i | 在指定行之前插入内容 | |
c | 替换指定行所有内容 | |
d | 删除指定行 | 常用 |
p | 打印行 | |
s | 用一个字符串替换另一个 | |
h | 把模式空间里的内容复制到暂存缓存区 | |
H | 把模式空间里的内容追加到暂存缓存区 | |
g | 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容 | |
G | 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面 | |
q | 退出 | |
! | 对所选行以外的所有行应用命令 | |
常用范例
查p
- 输出文件所有内容:sed -n 'p' xxx.txt
- 只显示文件第3行内容:sed -n '3p' xxx.txt
- 只显示文件第2-4行内容:sed -n '2,4p' xxx.txt
- 输出包含the的行:sed -n '/the/p' xxx.txt
- 输出从第四行起第一个包含the的行: sed -n '4,{/the/p}' xxx.txt (sed -n '4,/the/p' xxx.txt)
- 输出以AI开头的行:sed -n '/^AI/p' xxx.txt
- 输出以数字结尾的行: sed -n '/[0-9]$/p' xxx.txt
删d
- 删除第5行内容:sed -n '5d' xxx.txt
- 删除5-10行内容:sed -n '5,10d' xxx.txt
- 删除包含the字符的行:sed -n '/the/d' xxx.txt
- 删除以大写字母结束的行:sed -n '/[A-Z]$/d' xxx.txt
改s
- 替换指定字符:sed -n 's/A/B/g' xxx.txt
- 将行中第2个小写的o替换为大写的O:sed -n 's/o/O/2' xxx.txt
- 在每行行首加上#:sed -n 's/^/#/g' xxx.txt
- 在包含girl的行首加上#:sed -n '/girl/s/^/#/g' xxx.txt
- 在13,14行将o换成B:sed -n '13,14s/o/B/g' xxx.txt
增aic
细节
awk
awk是linux的一个强大的命令,具备强大的文本格式化能力,比如对一堆看起来没有什么规律的日志文件,文本文件等,通过awk命令之后,格式化输出为专业的可以做为应用级数据分析的样式
语法格式
awk [option] 'pattern[action]' file ...
处理模式
- awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符;
- awk按行处理文件,一行处理完毕之后,再处理下一行;
- awk可以根据用户指定的分隔符去工作,没有指定,则默认为空格;
内置变量
内置变量 | 说明 |
---|
$n | 指定分隔符后,当前的第n个列所在的字段 |
$0 | 完整的一行记录 |
FS | 字段分隔符,默认是空格 |
NF(Number of fields) | 字段分隔后,当前一共多少个字段 |
NR(Number of records) | 当前记录数,行数 |
常用参数
参数 | 说明 |
---|
-F | 指定分隔字段符 |
-v | 定义或修改一个awk内部变量 |
-f | 从脚本文件中读取awk命令 |
常用范例
- 输出第2列:awk '{print $2}' xxx.txt
- 输出第2,3列:awk '{print $2,$3}' xxx.txt
- 输出第3行内容:awk 'NR==3{print $0}' xxx.txt
- 输出第5,6行内容:awk 'NR==5,NR==6{print $0}' xxx.txt
- 输出第3-5行,并显示行号:awk 'NR==3,NR==5{print NR,&0}' xxx.txt
- 输出第2列并添加表头信息:awk '{print "numberr: "$2}' xxx.txt
- #号分隔符:awk -F "#" '{print $1,$2}' xxx.txt
- 输出倒数第1列:awk '{print $NF}' xxx.txt
- 格式化输出:awk '{printf "第一列:%s 第二列:%s 第三列:%s\n" ,$1,$2,$3}' xxx.txt
- BEGIN&AND: awk 'BEGIN{print "小明在学linux"} {print $0}END{print "处理结束"}' xxx.txt
- 输出含有zcy的行:awk '/^zcy/{print $0}' xxx.txt
- 找出pwd文件中nologin的用户: awk '/\/sbin\/nologin$/{print NR,$0}' pwd.txt
- 格式化输出 /etc/passwd 的部分字段: awk -F ":" 'BEGIN{print"用户名\t\t\t字段1\t\t 字段2\t\t 权限"} {printf "user:%-20s%-20s%-20s%-20s\n", $1,$4,$5,$7}' pwd.txt
- 统计nginx的access.log中访问IP的数量:awk '{print $1}' access.log | sort -n | uniq | wc -l
- 统计nginx的access.log中访问前10的IP: awk '{print NR,$1}' access.log | sort -n | uniq -c | sort -nr | head -10
grep
find
sort
uniq
head
xargs
常用命令汇总
- 查找字符并替换:sed -i "s/old/new/g" `grep -rl old ./`
- 去除行尾空格:find . -name '*.py' | xargs egrep '[a-z].* $' |cut -d : -f 1|uniq|xargs -I{} -t sed -i -e 's/ *$//g' {}