Shell文本处理
通配符
符号 | 作用 |
---|---|
* | 匹配0个或任意多个字符 |
? | 匹配一个任意字符 |
[] | 匹配中括号中的任意字符,[abc]匹配a,或b,或c |
[-] | -代表一个范围,如[a-z]代表匹配小写字母 |
[^] | 逻辑非,匹配不是括号内的字符,如[ ^0-9 ] ,代表匹配非数字字符 |
正则表达式
基础正则表达式
符号 | 作用 |
---|---|
* | 前一个字符匹配0次或任意次 |
. | 匹配除换行符以外的任意一个字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
[] | 匹配中括号中的任意一个字符,[a]匹配a |
[^] | 逻辑非,匹配非中括号中的任意一个字符 |
\ | 转义符 |
\ {n\ } | 前面的字符恰好出现n次,如[0-9]\ {4\ },匹配四位数字 |
\ {n,\ } | 前面的字符出现不小于n次,如[0-9]\ {2,\ },匹配两位及以上的数字 |
\ {n,m\ } | 前面的字符出现至少n次,最多m次,如[a-z]\ {6,8\ },匹配6-8位的小写字母 |
扩展正则表达式
符号 | 作用 |
---|---|
+ | 前一个字符匹配1次或任意多次 |
? | 前一个字符匹配0次或1次。 |
| | 匹配两个或多个分支选择 |
() | 匹配其整体为一个字符 |
文本操作四剑客
grep , cut, sed ,awk 文本字符串操作四剑客的区别
grep:用于查找匹配的行
cut: 截取数据. 截取某个文件中的列, 重点是按照列分割, 这个命令不适合截取文件中有多个空白字符的字段
sed: 增删改查数据. sed用于在文件中以行来截取数据进行增\删\改\查
awk:截取分析数据. 可以在某个文件中是以竖列来截取分析数据, 如果字段之间含有很多空白字符也可以获取需要的数据, awk是一种语言,可以深入分析文件数据
grep
在文件中搜索匹配的字符串行,包含匹配。
语法
grep [选项] “搜索内容” 文件名
选项
-i 忽略大小写
-n 输出行号
-v 反选查找,搜索 不包含“搜索内容”的内容,与!一样,反向的意思。
cut
切割提取指定列\字符\字节的数据
语法
1 |
|
options参数说明
选项参数 | 功能 |
---|---|
-f 提取范围 | 列号,获取第几列 |
-d 自定义分隔符 | 自定义分隔符,默认为制表符。 |
-c 提取范围 | 以字符为单位进行分割 |
-b 提取范围 | 以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。 |
-n | 与“-b”选项连用,不分割多字节字符; |
提取范围说明
提取范围 | 说明 |
---|---|
n- | 提取指定第n列或字符或字节后面所有数据 |
n-m | 提取指定第n列或字符或字节到第m列或字符或字节中间的所有数据 |
-m | 提取指定第m列或字符或字节前面所有数据 |
n1,n2,… | 提前指定枚举列的所有数据 |
小结
cut切割提取列
cut -d 分隔符切割 -f 提取第X列 文件或数据
cut切割提取字符
cut -c 提取字符范围 文件或数据
cut切割提取字节
cut -nb 提取直接范围 文件或数据
sed
用于编辑文本
sed (stream editor, 流编辑器) 是一款非交互流式文本编辑器
vim是交互式文本编辑器
增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容.
语法
1 |
|
选项参数说明
选项参数 | 功能 |
---|---|
-e |
直接在指令列模式上进行sed的动作编辑。它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项;一行命令语句可以执行多条sed命令 |
-i |
直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改 |
-f |
后跟保存了sed指令的文件 |
-n |
取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行 |
-r ruguler |
使用扩展正则表达式,默认情况sed只识别基本正则表达式 * |
sed程序命令功能描述
命令 | 功能描述 |
---|---|
a |
add新增,a的后面可以接字串,在下一行出现 |
c |
change更改, 更改匹配行的内容 |
d | delete删除, 删除匹配的内容 |
i |
insert插入, 向匹配行前插入内容 |
p |
print打印, 打印出匹配的内容,通常与-n选项和用 |
s | substitute替换, 替换掉匹配的内容 |
= |
用来打印被匹配的行的行号 |
n |
读取下一行,遇到n时会自动跳入下一行 |
特殊符号
命令 | 功能描述 |
---|---|
! |
就像一个sed命令,放在限制条件后面, 对指定行以外的所有行应用命令(取反) |
{sed命令1;sed命令2} | 多个命令操作同一个的行 |
awk
awk是一个强大的文本分析工具,awk在其对数据分析并生成报告时,显得尤为强大简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理, 因为切开的部分使用awk可以定义变量,运算符, 使用流程控制语句进行深度加工与分析。
创始人 Alfred V. Aho、Peter J. Weinberger和Brian W. Kernighan awk由来是姓氏的首字母
语法
1 |
|
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
选项参数说明
选项参数 | 功能 |
---|---|
-F | 指定输入文件拆分分隔符 |
-v | 赋值一个用户定义变量 |
awk内置变量
内置变量 | 含义 |
---|---|
ARGC | 命令行参数个数 |
ARGV | 命令行参数排列 |
ENVIRON | 支持队列中系统环境变量的使用 |
FILENAME | awk浏览的文件名 |
FNR | 浏览文件的记录数 |
FS | 设置输入域分隔符,等价于命令行 -F选项 |
NF | 浏览记录的域的个数, 根据分隔符分割后的列数 |
NR | 已读的记录数, 也是行号 |
OFS | 输出域分隔符 |
ORS | 输出记录分隔符 |
RS | 控制记录分隔符 |
$n |
$0 变量是指整条记录。$1 表示当前行的第一个域,$2 表示当前行的第二个域,……以此类推。 |
$NF | $NF是number finally,表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行列的总数 |
sort
对字符串升序或降序排序
对数字升序或降序
对多列进行排序
介绍
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出或重定向输出到指定文件。
语法
1 |
|
选项 | 说明 |
---|---|
==-n== | number,依照数值的大小排序 |
==-r== | reverse, 以相反的顺序来排序 |
==-t 分隔字符== | 设置排序时所用的分隔字符, 默认空格是分隔符 |
==-k== | 指定需要排序的列 |
-d | 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。 |
-f | 排序时,将小写字母视为大写字母 |
-b | 忽略每行前面开始出的空格字符 |
==-o 输出文件== | 将排序后的结果存入指定的文件 |
-u | 意味着是唯一的(unique),输出的结果是去完重了的 |
-m | 将几个排序好的文件进行合并 |
小结
能够使用sort对字符串升序或降序排序
字符串升序:
sort -kstart,end 文件
字符串降序:
sort -kstartr,end 文件
能够使用sort 对数字升序或降序
数字升序:
sort -kstartn,end 文件
数字降序:
sort -kstartnr,end 文件
能够使用sort 对多列进行排序
sort -kstart[nr],end -kstart[nr],end ... 文件
参考资料
http://linuxcommand.org/index.php