第四单元 正则表达式与软件包管理
4.1 vi和vim编辑器
vi是一款好用的文本编辑器,vim是vi的进阶升级
vi三种模式:
一般指令模式
以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模式中, 你可以使用“上下左右”按键来移动光标,你可以使用“删除字符”或“删除整列”来处理文件内容, 也可以使用“复制、贴上”来处理你的文件数据。
编辑模式
在一般指令模式下你按下“i, I, o, O, a, A, r, R”等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现“ INSERT 或 REPLACE ”的字样,此时才可以进行编辑。而如果要回到一般指令模式时, 则必须要按下“Esc”这个按键即可退出编辑模式。
命令行命令模式
在一般模式当中,输入“ : / ? ”三个中的任何一个按钮,就可以将光标移动到最下面那一列。在这个模式当中, 可以提供你“搜寻数据”的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等等的动作则是在此模式中达成的!
案例:三种模式直接的转换,以及常用按键
一般模式快捷键
0 或功能键[Home] 这是数字“ 0 ”:移动到这一列的最前面字符处
$ 或功能键[End] 移动到这一列的最后面字符处
G 移动到这个文件的最后一列
gg 移动到这个文件的第一列,相当于1G
/word 向光标之下寻找一个名称为 word 的字串
?word 向光标之上寻找一个字串名称为 word 的字串
x,X 在一列字当中,x为向后删除一个字符,X为向前删除一个字符
dd 删除光标所在的那一整列
ndd n为数字。删除光标所在的向下n列
yy 复制光标所在的那一列
nyy n为数字。复制光标所在的向下n列
p,P p为将已复制的数据在光标下一列贴上,P则为贴在光标上一列
u 复原前一个动作
. 意思是重复前一个动作的意思
编辑模式快捷键
i, I i为“从目前光标所在处插入”,I为“在目前所在列的第一个非空白字符处开始插入”
o, O o为“在目前光标所在的下一列处插入新的一列”; O为在目前光标所在处的上一列插入新的一列!
命令行模式快捷键
:n1,n2s/word1/word2/g n1与n2为数字。在第n1与n2列之间寻找word1这个字串,并将该字串取代为word2
:1,$s/word1/word2/g 从第一列到最后一列寻找word1字串,并将该字串取代为word2
:1,$s/word1/word2/gc 从第一列到最后一列寻找word1字串,并将该字串取代为word2,且在取代前显示提示字符给使用者确认(confirm)是否需要取代
:wq 储存后离开,若为 :wq! 则为强制储存后离开
:x 储存后离开,若为 :x! 则为强制储存后离开
:set nu 显示行号,设置之后,会在每一列的字首显示该列的行号
:set nonu 与set nu相反,为取消行号!
4.2 Linux三剑客之grep
4.2.1文件通配符:
*:表示任意个字符(不包括隐藏文件)
?:表示单个任意字符(中文也算一个字符)
[]: 表示匹配范围内的任意单个字符
[:space:]:空白字符
[:punct:]:标点符号
[:lower:]:小写字母
[:upper:]: 大写字母
[:alpha:]:大小写字母
[:digit:]: 数字
[:alnum:]:数字和大小写字母
[^]:表示匹配范围外的任意单个字符
练习:
1、创建a123、cd6、c78m、c1、my、m.z、k 67、8yu、789等文件,注意以上文件是顿号分隔,其他符号都是文件名组成部分
2、显示所有以a或m开头的文件;
3、显示所有文件名中包含了数字的文件;
4、显示所有以数字结尾且文件名中不包含空白的文件;
5、显示文件名中包含了非字母或数字的特殊符号的文件。
4.2.2正则表达式:
元字符:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
匹配次数:
*:匹配其前面的字符任意次数
.*:任意长度的任意字符
\?:匹配其前面的字符1次或0次
{m,n}:匹配其前面的字符至少m次,至多n次
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符后面的任意内容必须出现在行尾 ^$:空白行
\<或\b:其后面的任意字符必须作为单词首部出现
\>或\b:其前面的任意字符必须作为单词的尾部出现
分组:
\(\):向后引用
示例:
删除行首空格
sed 's/^[ \t]*//g'
删除行末空格
sed 's/[ \t]*$//g'
删除字符串前后空白
sed ’s/[[:space:]]//g‘
4.2.3grep命令
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行.
模式:由正则表达式的元字符及文本字符所编写出的过滤条件
语法: grep [选项]... PATTERN [FILE]...
选项:
-v:排除匹配的结果,显示不匹配的内容
-n:显示匹配的行与行号
-i:不区分大小写
-c:只统计匹配的行数
-E:使用egrep命令
--color=auto:为grep过滤结果添加颜色
-w:强制 PATTERN 仅完全匹配字词
-o:只输出匹配的内容
扩展正则表达式:egrep支持除了以上正则表达式,还支持|、+
fgrep:不支持正则表达式
4.3 Linux软件包管理
4.3.1 rpm软件包安装
因为安装软件是 root 的工作,因此你得要是 root 的身份才能够操作 rpm 这指令的。
rpm安装、升级、删除选项
选项:
-i :安装软件包
-v :提供更多的详细信息输出
-h :显示安装进度
-U :升级软件包
-e :清除 (卸载) 软件包
rpm查询
选项:
-q :仅查询,后面接的软件名称是否有安装;
-qa :列出所有的,已经安装在本机 Linux 系统上面的所有软件名称;
-qi :列出该软件的详细信息 (information),包含开发商、版本与说明等;
-ql :列出该软件所有的文件与目录所在完整文件名 (list);
-qc :列出该软件的所有配置文件 (找出在 /etc/ 下面的文件名而已)
-qd :列出该软件的所有说明文档 (找出与 man 有关的文件而已)
-qR :列出与该软件有关的相依软件所含的文件 (Required 的意思)
-qf :由后面接的文件名称,找出该文件属于哪一个已安装的软件;
4.3.2 yum软件包管理
利用 yum 进行查询、安装、升级与移除功能
查询功能:
选项:
search :搜寻某个软件名称或者是描述 (description) 的重要关键字;
list :列出目前 yum 所管理的所有的软件名称与版本,有点类似 rpm -qa;
info :同上,不过有点类似 rpm -qai 的执行结果;
安装/升级功能:
选项:
install :后面接要安装的软件!
update :后面接要升级的软件,若要整个系统都升级,就直接 update 即可
移除功能:
选项:
remove : 后面接要移除的软件!
yum源配置
# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
配置讲解:
[base]:代表软件库的名字!中括号一定要存在,里面的名称则可以随意取。但是不能有两个相同的软件库名称, 否则 yum 会不晓得该到哪里去找软件库相关软件清单文件。
name:只是说明一下这个软件库的意义而已,重要性不高!
mirrorlist=:列出这个软件库可以使用的映射站台,如果不想使用,可以注解到这行;
baseurl=:这个最重要,因为后面接的就是软件库的实际网址! mirrorlist 是由 yum 程序自行去捉映射站台, baseurl 则是指定固定的一个软件库网址!我们刚刚找到的网址放到这里来啦!
enable=1:就是让这个软件库被启动。如果不想启动可以使用 enable=0 喔!
gpgcheck=1:还记得 RPM 的数码签章吗?这就是指定是否需要查阅 RPM 文件内的数码签章!
gpgkey=:就是数码签章的公钥档所在位置!使用默认值即可
yum清除软件库数据
# yum clean all
yum显示已配置的源
# yum repolist
epel源简单配置
4.4 管道命令
4.4.1 什么是管道
命令A|命令B --> 命令A的输出当做命令B的输入
第一个管道命令:
ls -al /etc | less
4.4.2 管道命令之cut
cut 可以根据条件从命令结果中提取所对应内容。
例如,/etc/passwd文件,我只想要第三列内容,怎么办?
语法:cut [选项]... [文件]...
选项:
-c 按字符选取内容
-d '指定分隔符'
-f n1,n2: 分割以后显示第几段内容, 使用 , 分割
示例:
# cat test1.txt
dsfsfdsf
# cat test1.txt |cut -c 1
# cat /etc/passwd|cut -d ':' -f 3
4.4.3 管道命令之sort
命令用于将文本文件内容加以排序
语法:sort [选项]... [文件]...
选项:
-u: 去掉重复的
-n: 按照数值大小排序
-r: 按照倒序排列
-t: 指定字段分隔符
-k: 根据哪一列排序
示例:
1、# cat /etc/passwd|cut -d ':' -f3|sort -unr
2、# sort -t ':' -k3 -nru /etc/passwd
4.4.4 管道命令之wc
统计文本内容,包括行数,单词数,字节数
语法:wc [选项]... [文件]...
选项:
-c:字节数
-w:单词数
-l:行数
4.4.5 管道命令之uniq
uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用。
用法:uniq [选项]... [文件]
选项;
-c:统计每行内容出现的次数
示例;
[root@hadoop01 export]# cat 5.txt
张三 98
李四 100
王五 90
赵六 95
麻七 70
李四 100
王五 90
赵六 95
麻七 70
# 排序
[root@hadoop01 export]# cat 5.txt | sort
李四 100
李四 100
麻七 70
麻七 70
王五 90
王五 90
张三 98
赵六 95
赵六 95
# 去重
[root@hadoop01 export]# cat 5.txt | sort | uniq
李四 100
麻七 70
王五 90
张三 98
赵六 95
# 统计
[root@hadoop01 export]# cat 5.txt | sort | uniq -c
2 李四 100
2 麻七 70
2 王五 90
1 张三 98
2 赵六 95
4.4.6 管道命令之tr
替换:
# 将 小写i 替换成 大写 I
echo "itheima" | tr 'i' 'I'
# 把itheima的转换为大写
echo "itheima" |tr '[a-z]' '[A-Z]'
# 把 HELLO 转成 小写
echo "HELLO" |tr '[A-Z]' '[a-z]'
删除:
echo 'abc1d4e5f' | tr -d '[0-9]'
作业
1、vi 有三种模式
2、列举vi常用的快捷键5个
3、找出你的 Linux 是否有安装 logrotate 这个软件?
4、列出上题当中,属于该软件所提供的所有目录与文件:
5、列出 logrotate 这个软件的相关说明数据:
6、分别仅找出 logrotate 的配置文件与说明文档
7、若要成功安装 logrotate ,他还需要什么文件的帮忙?
8、由上面的第7题,找出 /bin/sh 是那个软件提供的?
9、通过 EPEL 安装 NTFS 文件系统所需要的软件?
10、管道命令cut、sort、wc、uniq、tr命令及选项说明?