1. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
文本处理工具
1、查看文本文件内容
1.1 查看文本内容 cat
常见选项
-E:显示行结束符¥;-A:显示所有控制符;-n:对显示出的每一行进行编号;-b:非空行编号;-s:压缩连续的空行成一行。
1.2 显示行号 nl = cat -b
1.3 逆向显示文本内容 tac
1.4 将同一行的内容逆向显示 rev
2.1 查看非文本文件内容 hexdump -C
2、分页查看文件内容 more -d(显示翻页及退出提示) less(man命令的分页器)
3、显示文本前面或后面的行内容 head -c # 指定获取前#个字节;-n # 指定获取前#行,#为负数表示从文件头取到倒数第#行 ;tail 同上相反 -f 跟踪新增加的内容
4、按列抽取文本 cut -d 指明分隔符;-c 按字符切割
5、合并多个文件同行号的列到一行 paste
6、收集文本统计数据 wc
-l | 只计数行数 |
-w | 只计数单词总数 |
-c | 只计数字节总数 |
-m | 只计数字符总数 |
-L | 显示文件中最长行的长度 |
7、文本排序 sort -n 执行按数字大小整理 ;-r 执行反方向(由上至下)整理
8、 去重 uniq -c 显示每行重复出现的次数
文本查找工具
1、文件查找
1.1 非实时查找:locate
-i | 不区分大小写的搜索 |
-n N | 只列举前N个匹配项目 |
-r | 使用基本正则表达式 |
1.2 实时查找:find
1.2.1 指定搜索目录层级 -maxdepth level 最大搜索目录深度,指定目录下的文件为第一级;-mindepth level 最小搜索目录深度
1.2.2 对每个目录先处理目录内的文件,在处理目录本身 -depth
1.2.3 根据文件名和iNode查找 -name “文件名称” ; -inum n
1.2.4 根据属主、属组查找
1.2.5 根据文件类型查找 -type TYPE
1.2.6 空文件或目录 -empty
文本处理三剑客
1、grep
文本搜索工具,根据用户指定的模式(正则表达式字符及文本字符所编写的过滤条件)对目标文本逐行进行匹配检查。
选项
-i | 忽略字符大小写 |
-n | 显示匹配的行号 |
-c | 统计匹配的行数 |
-o | 仅显示匹配到的字符串 |
-w | 匹配整个单词 |
-r | 递归目录,但不处理软连接 |
-R | 递归目录,但处理软连接 |
2、sed 行编辑器,从文件或管道中读取一行,处理一行,输出一行。
格式 sed [option]... 'script;script;...' [inputfile...]
-n | 不输出模式空间内容到屏幕 |
-e | 多点编辑 |
-f FILE | 从指定文件中读取编辑脚本 |
-r,-E | 使用扩展正则表达式 |
-i.bak | 备份文件并原文编辑 |
-s | 将多个文件视为独立文件,而不是单个连续的长文件流 |
p | 打印当前模式空间的内容,追加到默认输出之后 |
Ip | 忽略大小写输出 |
d | 删除模式空间匹配的行,并立即启动下一轮循环 |
a [\]text | 指定行后面追加文本,支持使用\n实现多行追加 |
i [\]text | 在行前面插入文本 |
c [\]text | 替换行为单行或多行文本 |
w file | 保存模式匹配的行至指定文件 |
r file | 读取指定文件的文本至模式空间中匹配的行后 |
= | 为模式空间的行打印行号 |
! | 模式空间匹配行取反处理 |
q | 结束或提出sed |
查找替代
s/pattern/pattern/修饰符 查找替换,支持使用其他分隔符,s@@@,s###
替换修饰符:g 行内全局替换;p 显示替换成功的行;w /PATH/FILE 将成功替换的行保存至文件中;I,i 忽略大小写
3、awk 报告生成器,格式化文本输出
格式: awk [options] 'program' var=value file...
awk [options] -f programfile var=value file... program 由BEGIN语句块、模式匹配的通用语句块、END语句块。
常见选项
-F “分隔符”指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符
-v var=value 变量赋值
awk变量
内置变量:FS 输入字段分隔符,默认为空白字符,功能相当于-F;OFS 输出字段分隔符,默认为空白字符 ;RS 输入记录record分隔符,指定输入时的换行符;ORS 输出记录分隔符,输出时用指定符号代替换行符;NF 字段数量;NR 记录的编号;FNR 各文件分别计数,记录的编号;FILENAME 当前的文件名
自定义变量:-v var=value
文本格式化命令(printf)
实现格式化输出
格式: printf “”FORMAT“,item1,otem2,...
%s | 显示字符串 |
%d,%i | 显示十进制整数 |
%f | 显示为浮点数 |
%e,%E | 显示科学计数法数值 |
%c | 显示字符的ASCII码 |
%g,%G | 以科学计数法或浮点形式显示数值 |
%u | 无符号整数 |
%% | 显示%自身 |
2. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
基本正则
. | 匹配任意单个字符(除了\n),可以是一个汉字或其他国家的文字 |
[] | 匹配指定范围内的任意单个字符 |
[^] | 匹配指定范围外的任意单个字符 |
[:alnum:] | 字母和数字 |
[:alpha:] | 代表任何英文大小写字符 |
[:lower:] | 小写字母 |
[:upper:] | 大写字母 |
[:blank:] | 空白字符 |
[:space:] | 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白 |
[:cntrl:] | 不可打印的控制字符(退格、删除、警铃...) |
[:digit:] | 十进制数字 |
[:xdigit:] | 十六进制数字 |
[:graph:] | 可打印的非空字符 |
[:print:] | 可打印字符 |
[:punct:] | 标点符号 |
* | 匹配前面的字符任意次,包括0次,贪婪模式,尽可能长的匹配 |
.* | 任意长度的任意字符 |
\? | 匹配其前面的字符出现0次或1次 |
\+ | 匹配前面的字符出现最少一次 |
\{n\} | 匹配前面的字符n次 |
\{m,n\} | 匹配前面的字符至少m次,至多n次 |
\{,n\} | 匹配前面的字符至多n次,<=n |
\{n,\} | 匹配前面的字符至少n次 |
^ | 行首锚定,用于模式的最左侧 |
$ | 行尾锚定,用于模式的最右侧 |
^PATTERN$ | 用于模式匹配整行 |
^$ | 空行 |
^[[:space:]]*$ | 空白行 |
\<或\b | 词首锚定,用于单词模式的左侧 |
\>或\b | 词尾锚定,用于单词模式的右侧 |
\<PATTERN\> | 匹配整个单词 |
扩展正则表达式
. | 任意单个字符 |
[wang] | 指定范围的字符 |
[^wang] | 不在指定范围的字符 |
[:alnum:] | 字母和数字 |
[:alpha:] | 代表任何英文大小写字符 |
[:lower:] | 小写字母 |
[:upper:] | 大写字母 |
[:blank:] | 空白字符 |
[:space:] | 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白 |
[:cntrl:] | 不可打印的控制字符(退格、删除、警铃...) |
[:digit:] | 十进制数字 |
[:xdigit:] | 十六进制数字 |
[:graph:] | 可打印的非空字符 |
[:print:] | 可打印字符 |
[:punct:] | 标点符号 |
* | 匹配前面字符任意次 |
? | 0或1次 |
+ | 1次或多次 |
{n} | 匹配n次 |
{m,n} | 至少m,至多n次 |
^ | 行首 |
$ | 行尾 |
\<或\b | 语首 |
\>或\b | 语尾 |
3. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
变量命名规则
区分大小写;不能使用程序中的保留字和内置变量:如:if,for;只能使用数字、字母及下划线,且不能以数字开头。
变量类型
环境变量:可以使用子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量;一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程;一般只在系统配置文件中使用,在脚本中较少使用。
声明变量并赋值:export name=VALUE ; declare -x name=VALUE。
变量引用:$name ${name}。
显示所有的环境变量:env、printenv、export、declare -x。
查看指定进程的环境变量:cat /proc/$PID/environ
删除变量:unset name
只读变量:只能声明定义,但后续不能修改和删除,既常量
声明只读变量:readonly name 、declare -r name
查看只读变量:readonly [-p] 、declare -r
位置变量:在bash shell中内置的变量,在脚本代码中调用通过命令行传递给脚本的参数。
$1,$2 | 对应第一个、第二个参数,shift[n]换位置 |
$0 | 命令本身,包括路径 |
$* | 传递脚本的所有参数,全部参数合为一个字符串 |
$@ | 传递脚本的所有参数,每个参数为独立字符串 |
$# | 传递给脚本的参数的个数 |
清空所有位置变量:set --
4. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
5. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
for i in {1..100}
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
for i in {1..100}
do
username="user$i"
if id -u $username >/dev/null 2>&1;them
echo "user $username already exits"
else
useradd $username has been added
fi
done
6. 磁盘存储术语总结: head, track, sector, sylinder.
Head(磁头) | 磁头是用来读取和写入数据的关键部件。它附着在机械臂上,可以移动到磁盘的不同部分。每个磁头都可以独立地读取和写入数据,但在同一时间内,只有一个磁头可以访问给定的轨道。 |
Track(磁道) | 磁道是磁盘上的一组同心圆,其中每一个都由一个磁头进行访问。这些磁道被组织成多个扇区,每个扇区包含一定数量的数据位。 |
Sector(扇区) | 用于识别该扇区,以及实际的数据。扇区的大小通常为512字节,但现代磁盘通常使用4KB的扇区大小。 |
Cylinder(柱面) | 柱面是由同一磁道上的所有扇区组成的。在早期的硬盘驱动器中,磁头在访问同一柱面中的所有扇区时是不需要移动的。然而,现代硬盘驱动器使用旋转速度更快的磁盘和更先进的磁头技术,使得访问同一柱面中的不同扇区也需要移动磁头。 |
7. 总结MBR,GPT结构。
MBR | 位于磁盘最开始的扇区,它记录了磁盘分区表的信息,包括分区的数量、大小和类型等。MBR通常只能容纳4个主分区,如果需要更多的分区,需要在扩展分区中创建逻辑分区。MBR的大小是固定的,为512字节。 |
GPT | 基于UEFI(Unified Extensible Firmware Interface)的磁盘分区表,它使用GUID(Globally Unique Identifier)作为分区的标识符。GPT可以容纳更多的分区,并且可以支持更大的磁盘容量。GPT的第一个扇区是GPT头,其中包含了磁盘分区表的信息,以及一个签名(GUID)来验证GPT表的完整性。GPT的分区表位于GPT头之后,每个分区都有一个GUID和一个类型(如系统、数据、恢复等)。GPT的大小不是固定的,可以根据磁盘的大小动态调整。 |
8. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff
fdisk:用于创建、删除和修改磁盘分区。
-d | 显示磁盘分区表信息 |
-l | 列出磁盘分区信息 |
-n | 创建一个新的分区。 |
-delete | 删除一个分区。 |
-help | 显示帮助信息。 |
-w | 保存分区表更改 |
parted:类似于fdisk,可用于创建、删除和调整分区。
-l | 列出磁盘分区表信息。 |
-i | 显示磁盘分区详细信息。 |
-d | 删除一个分区。 |
-n | 创建一个新的分区。 |
mkfs:用于在磁盘分区上创建文件系统。
-t 文件系统类型 | 指定要创建的文件系统类型,如ext4、XFS等。 |
-L 标签 | 为文件系统指定一个标签 |
tune2fs:重新设定ext系列文件系统可调整参数的值。
xfs_info:显示已挂载的xfs文件系统信息。
mount:挂载文件系统
格式:mount [-lhV]、mount -a [options]、mount [options] [–source] | [–target]、mount [options]、mount []。
-a –all | 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab |
-B –bind | 绑定目录到另一个目录上 |
-c –no-canonicalize | 不对路径规范化 |
-f|–fake | 空运行;跳过 mount(2) 系统调用 |
-F|–fork | 对每个设备禁用 fork,配合-a 选项一起使用 |
-T|–fstab path | 指定写文件,默认 /etc/fstab |
-i|–internal-only | 不调用 mount. 辅助程序 |
-l|–show-labels | 显示文件系统的 labels |
-n|–no-mtab | 不更新/etc/mtab,mount不可见 |
-o|–options o1,o2 | 挂载选项列表,以英文逗号分隔 |
-O|–test-opts o1,o2 | 限制文件系统集合(和 -a 选项一起使用) |
-r|–read-only | 以只读方式挂载文件系统(同 -o ro) |
-t|–types | 指定要挂载的设备上的文件系统类型,如:ext4,xfs |
–source device | 指明源(路径、标签、uuid) |
-v|–verbose | 显示过程 |
–target mountpoint | 指明挂载点 |
-w|–rw|–read-write | 以读写方式挂载文件系统(默认) |
-L LABEL | 以卷标指定挂载设备 |