1. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
一、文本处理工具
1.查看文本内容 cat 命令格式:cat [OPTION] [FILE]
常见的选项有:
-E 显示行结束符$
-A 显示所有控制符
-n 对显示出的每一行进行编号
示例:
2.逆向显示文本 tac
示例:
3.同一行内容逆向显示(翻面) rev
示例:
4.分页查看文本内容 less 命令格式:less [FILE]
less可以实现分页查看文件,可以在查看文本时使用:
/文本 搜索文本
pgup 向上翻页
pgdn 向下翻页
q 退出
5.查看文本头部内容 head 命令格式:head [OPTION] [FILE]
常用选项:
-n# 指定获取前#行
-# 同上
如果指定位负数则会获取首行到倒数#行
示例:
6.查看文本尾部内容 tail 命令格式:tail [OPTION] [FILE]
常用选项:
-n# 指定获取后#行
-# 同上
如果指定为+#则会从#获取到最后一行
示例:
7.按列抽取文本显示 cut 命令格式:cut [OPTION...] [FILE]
常用选项:
-d . 指定分隔符,默认tab
-f # 第几个字段
示例:
8.合并多个文件 paste 命令格式:paste [option] [file..]
常用选项:
-d . 指定分隔符,默认tab
-s 所有行合成一行显示
示例:
9.文本排序 sort 命令格式:sort [option] [file]
常用选项:
-r 执行反方向整理
-R 随机排序
-n 执行按数字大小整理
-h 人类可读排序
-u 合并重复项,即去重
-t c 使用c作为字段界定字符
示例:
10.文本去重 uniq 命令格式: uniq [option] [file]
常用选项:
-c 显示每行重复出现的次数
-d 仅显示重复过的行
-u 仅显示不曾重复的行
示例:
11.文本数据统计 wc
常用选项:
-l 计数行数
-w 计数单词总数
-c 计数字节总数
-m 计数字符总数
示例:
二、文件查找工具
1. locate:非实时查找
locate查询系统上预建的文件索引数据库/var/lib/mlicate/mlocate.db
索引的构建是在系统较为空闲时进行(很消耗资源),执行updatedb可以更新数据库
特点:
查找速度快
模糊查找
非实时查找
搜索的是文件的全路径,不仅仅是文件名
可能只搜索用户具备读取和执行权限的目录
命令格式:locate [option] [PATTERN]
常用选项:
-i 不区分大小写的搜索
-n N 只列举前N个匹配项目
-r 使用基本正则表达式
示例:
2. find:实时查找
find是实时查找工具,通过遍历指定路径完成文件查找
工作特点:
查找速度略慢
精确查找
实时查找
查找条件丰富
可能只搜索用户具备读取和执行权限的目录
命令格式:find [OPTION]... [查找路径] [查找条件] [处理动作]
find命令查找条件丰富可以对指定目录进行查找,根据文件名和inode,属主、属组,文件类型,文件大小,时间戳,权限来进行查找
3. 参数替换 xargs
由于很多命令不支持管道|来传递参数,xargs用于产生某个命令的参数,xargs可以读入stdin的数据,许多命令不能解释过多参数,命令执行可能会失败,xargs也可以解决
find经常和xargs命令进行组合
示例:
三、文本处理三剑客
1. grep 文本过滤
grep 命令主要针对文本的(正则表达式)行基于模式进行过滤,文本搜索工具。
命令格式: grep [OPTIONS] PATTREN [FILE]
常见选项:
-m # 匹配#次后停止
-v 显示不被pattren匹配到的行,即取反
-i 忽略大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-A # 某字符后#行
-B # 某字符前#行
-C # 某字符前后#行
-e 实现多个选项间的逻辑or关系
-f file 根据模式文件处理
-r 递归,但不处理软链接
-R 递归,处理软链接
示例:
2. sed 行编辑器
sed是行编辑器,sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。
命令格式:sed [OPTION] 'script;script;...' [inputfile]
sed 选项 '地址命令;地址命令;...' 文件
常见选项:
-n 关闭自动打印
-e 多点编辑
-f 从指定文件中读取编辑脚本
-E,-r 使用扩展正则表达式
-i.bak 备份文件并原处编辑
-s 将多个文件视为独立文件,而不是单个连续的长文件流
地址格式:
可以使用具体的行数,也可以使用正则表达式
命令:
-p 打印当前模式空间内容,追加到默认输出之后
-d 删除模式空间匹配的行,并立即启用下一轮循环
a[#] text 在指定的行后面追加文本,支持实现多行追加
i[#] text 在指定行前面插入文本
c[#] text 替换行文本内容
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
查找替代:
格式:s/pattern/string/修饰符 也可以使用其他分隔符,如:s@@@ , s###
替换修饰符:
g 行内全部替换
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存至文件中
I,i 忽略大小写
示例:
三、文本格式化命令 printf
printf 增强版echo,实现丰富的格式化输出,常用于脚本编写中,命令后续的文本内容样式会按照命令中的指定格式打印输出
命令格式:printf ''指定的格式" "文本1" "文本2" ......
常用格式替换符
%s 字符串
%d,%i 十进制整数
%f 浮点格式
%c ASCII字符
%o 八进制值
%u 不带正负号的十进制值
%x 十六进制值(a-f)
%X 十六进制值(A-F)
%% 表示%本身
常用的转义字符
\a 警告字符
\b 后退
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ 表示\本身
示例:
2. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
正则表达式的元字符分类:字符匹配,次数匹配,位置锚定,分组
基本正则表达式:
字符匹配
. 匹配任意单个字符(除了\n),可以是一个汉字或其他国家的文字
[] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z]
[^] 匹配指定范围外的任意单个字符。示例:[^wanng]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,即A-Z,a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:punct:] 标点符号
[:blank:] 空白字符(空格和制表符)
次数匹配
* 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符出现0次或1次,即:可有可无
\+ 匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} 匹配前面的字符n次
\{m.n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次,即:<=n
\{n,\} 匹配前面的字符至少n次,即:>=n
位置锚定
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTREN$ 用于匹配模式整行
^$ 空行
\< 词首锚定,用于单词模式的左侧
\> 词尾锚定,用于单词模式的右侧
\<PATTERN\> 匹配整个单词
分组
分组:() 将多个字符捆绑在一起,当作一个整体处理
后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为::\1,\2,\3,...
或者 \|
a\|b a或b
C\|cat C或cat
\(C\|c\)at Cat或cat
扩展正则表达式:
使用扩展正则表达式需要加选项 -E,-r
字符匹配
. 匹配任意单个字符(除了\n),可以是一个汉字或其他国家的文字
[] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z]
[^] 匹配指定范围外的任意单个字符。示例:[^wanng]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,即A-Z,a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:punct:] 标点符号
次数匹配
* 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
? 匹配其前面的字符出现0次或1次,即:可有可无
+ 匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
{n} 匹配前面的字符n次
{m.n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次,即:<=n
{n,} 匹配前面的字符至少n次,即:>=n
位置锚定
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTREN$ 用于匹配模式整行
$ 空行
\< 词首锚定,用于单词模式的左侧
\> 词尾锚定,用于单词模式的右侧
\ 匹配整个单词
分组其他
() 分组
后向引用:\1, \2, \3, ...注意: \0 表示正则表达式匹配的所有字符
| 或者
a|b a或b
C|cat C或cat
(C|c)at Cat或cat
3. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
变量命名的规则:
1.区分大小写
2.不能使用程序中方保留字和内置变量。如:if,for等
3.不能使用数字,字母及下划线,且不能以数字开头,不支持短横线 "-",和主机名相反
4.用英文单词命名,并体现出实际作用,不使用简写
5.变量名大写
6.局部变量小写
7.函数名小写
环境变量的使用:
1.环境变量可以使子进程(包括孙子进程)继承父进程的变量,但是父进程不能使用子进程的变量
2.一旦子进程修改从父进程继承的变量,会将新的值传递给孙子进程
变量声明和赋值:
export name=VALUE
declare -x name=VALUE
或者分两步实现
name=VALUE
export name
变量引用:
$name
${name}
删除变量:
unset name
位置变量的使用
在bash shell中内置的变量,在脚本代码中调用通过命令行传递给脚本参数
$1,$2,... 对应第1个,第2个参数
$0 命令本身,包括路径
$* 传递脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数个数
只读变量的使用
只能声明定义,后续不能修改和删除,即常量
声明只读变量:
readonly name
declate -r name
状态变量
进程执行后,将使用变量$?来保存状态码的相关数字,不同的值反应成功和失败,$?取值0~255
执行$?返回的值为0代表上一个进程执行成功,若返回的值是1~255则代表上一个执行的进程失败
4. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
5. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100 2)先id判断是否存在 3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
6. 磁盘存储术语总结: head, track, sector, sylinder.
head :磁头
track:磁道
sector:扇区
sylinder:柱面
7. 总结MBR,GPT结构。
MBR分区模式:fdisk管理MBR分区,支持最多3个主分区,至少1一个扩展分区,扩展分区内的逻辑分区数字是以5开始,适合于2T以内的磁盘使用
GPT分区模式:gdisk管理GPT分区,支持分128个主分区,适用于存储空间大的硬盘
8. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
分区管理:
lsblk:查看本机的硬盘
fdisk [磁盘路径] 进入MBR模式分区
选项:
p 打印现有分区
n 新建分区
d 删除分区
w 存盘退出
q 不存盘退出
partprobe:将硬盘的分区表与内存同步
文件系统管理:
xfs:SGI,支持最大8EB的文件系统,不支持缩减,只支持扩展
ext4:是ext文件系统的最新版,提供了很多新的特性,包括秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,相对成熟的文件系统