grep文本编辑器

来源:互联网 发布:科尔盖特大学 知乎 编辑:程序博客网 时间:2024/06/16 04:55

8月10日内容

(一)回顾昨天内容 
管理员:0 
普通用户:1-65535 
系统用户:1-499(centos 6),1-999(centos 7) 
普通登入用户:500-60000 (centos 6),1000-60000(centos 7)


  • 用户管理和权限管理 
    • 1:用户管理 
      • useradd -u, -g,-G(附加组),-c,-d, -s, -r(创建系统用户), -M(不创建家目录), 
        • 思考题:删除yhy用户家目录,如何还原(root用户重新创建yhy的家目录,拷贝/etc/skel/.bash* 的三个文件到/etc/yhy/下即可)
      • usermod -u, -g, -G, -a, -c, -l(修改用户名), -s, -L(锁定用户密码), -U(解锁用户密码)
      • userdel -r(同时删除家目录)
      • passwd -d(删除用户密码),-e(设置用户过期期限),–stdin
      • gpasswd-a(向组中添加用户),-d(向组中移除用户),
      • chage修改密码过期时间
      • groupadd -g, -r(创建系统用户)
      • groupmod-g, -n(修改组名)
      • groupdel (删除组)
      • chmod
      • chown
      • id-u , -g, -G
      • su切换环境变量,和不切换环境变量 给大家演示 
        • su - yhy1 -c “whoami” 不切换用户,以目标用户执行命令
    • 2:权限管理 
      • chmod
      • umask:权限遮罩码 
        • 查看当前的umask的值
        • umask UMASK值:设置umask的值,且仅对当前shell进程有效
      • install:复制文件并设置文件属性 
        • install anaconda-ks.cfg -m 633 anaconda.new :复制anaconda文件为anaconda.new,并设置其权限
        • -o:指定属主
        • -g:指定属组
        • -d:创建目录 
          • install -d data:创建data目录,类似与mkdir

(二)回顾昨天内容(通配符)

前言:通赔符是模糊匹配的基础,因为通赔符机制的存在使得我们在查找文件的时候非常方便

  • *:匹配任意长度的任意字符,可以一个都没有
  • ?:匹配任意单个字符,必须有一个
  • [ ]:匹配指定范围内的单个字符
  • [^]:匹配指定范围外的任意当个字符 
    • [^[0-9]]或[^0-9]:表示匹配数字外的任意字符
    • [^[:upper:]]:表示匹配大写字母外的任意字符
    • pa[0-9]: pa后面匹配一个数字
    • [a-z], [A-Z] [0-9] [a-z0-9] [abdxy]
    • pa[0-9]: pa后面匹配一个数字
    • pa[0-9][0-9]: pa后面匹配两个数字
    • [[:upper:]]:表示所有大写字母
    • [[:lower:]]:表示所有小写字母
    • [[:alpha:]]:表示所有字母
    • [[:digit:]]:表示所有数字
    • [[:alnum:]]:表示所有的字母和数字
    • [[:space:]]:表示所有的空白字符
    • [[:punct:]]:表示所有的标点符号

(三)回顾昨天上课内容(重定向和管道)

前言:重定向指定了将文件流数据导出的方向

  • > , >>
  • <, <<
  • 2>, 2>>
  • &> , &>>

(四)今日学习内容(grep文本处理工具)

前言:文本处理三剑客 (regular expression:正则表达式)
grep是一款文本过滤工具,基于正则表达式进行模式匹配
sed:stream editor 流编辑器
awk:linux上实现为gawk,文本报告生成器(格式化文本)

  • 文本搜索工具,根据用户指定的模式,对目标文本逐行进行匹配检查,打印匹配到的行
  • 基于Perl的正则表达式
  • 使用格式:grep [选项] 匹配模式 file对象
  • 选项说明: 
    • –color=auto:对匹配到的文本着色,高亮显示
    • -i:忽略字符大小写
    • -o:仅显示匹配到的字符串本身
    • -v:方向匹配,匹配到的文本行不显示,不能匹配到的行显示
    • -E:表示支持使用扩展的正则表达式,等同于egrep
    • -q:静默模式,不输出任何信息到标准输出
    • -A(after):显示匹配到的行和其后面的行,给一个数字 
      • grep -A 1 root /etc/passwd
    • -B(before):显示匹配到的行和其前面的行,给一个数字 
      • grep -B 1 root /etc/passwd
    • -C(center):显示匹配到的行和其前后的行,给一个数字 
      • grep -C 1 root /etc/passwd
  • 字符匹配
. :匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符
[^ ]:匹配指定范围外的任意当个字符
[[:digit:]] [[:lower:]] [[:upper:]] [[:alpha:]] [[:alnum:]] [[:punct:]] [[:space:]]
  • 匹配次数
用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数,默认为贪婪模式 
*:表示匹配其前面的字符任意次,0,1,多次
例如:grep “x*y”
.*:匹配任意长度的任意字符
\?:匹配其前面的字符0次或一次,即其前面的字符是可有可无的
\+:匹配其前面的字符一次或多次,即其前面的字符要出现至少一次
\{m\}:精确匹配到其前面字符的m次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{0,n\}:至多n次
\{m,\}:至少m次
  • 位置锚定
^:行首锚定,用于模式的最左边
$:行尾锚定,用于模式的最右边
^pattern$:用于pattern来匹配整行
^$:空白行
^[[:space:]]$:空行或空白字符的行
单词:非特殊字符组成的连续字符都称为单词
\<\b:词首锚定,用于单词模式的左侧
\>\b:词尾锚定,用于单词模式的右侧
\<pattern\>:匹配完整单词
  • 练习
1:显示/etc/passwd文件中不以/bin/bash结尾的行 
grep -v “/bin/bash” /etc/passwd

2:找出/etc/passwd文件中的两位数或三位数的行
egrep “[0-9]{2,3}” /etc/passwd

3:找出/etc/rc.d/rc.sysinit(centos 6)或/etc/grub2.cfg(centos 7)文件中,以至少一个空白字符开头,且后面有非空白字符的行
grep “^[[:space:]]+[^[:space:]]+” /etc/grub2.cfg

4:找出”netstat -tan”命令的结果中以’LISTEN’后跟01或多个空白字符结尾的行
netstat -tan | grep “LISTEN[[:space:]]*$”

(五)今日学习内容(egrep文本处理工具)

前言:egrep等效于grep -E ,基于扩展的正则表达式做模式匹配,那什么是扩展的正则表达式呢?

支持扩展的正则表达式实现类似于grep文本过滤功能:grep -E
-o , -i , -v , -q , -A , -B , -C ,
-G:表示支持基本正则表达式
扩展正则表达式的元字符

1:字符匹配
. :匹配任意单个字符
[ ]:匹配指定范围内的任意单个字符
[^ ]:匹配指定范围外的任意当个字符
[[:digit:]] [[:lower:]] [[:upper:]] [[:alpha:]] [[:alnum:]] [[:punct:]] [[:space:]]

2:次数匹配
*:任意次,01或多次
?:0次或1次,其前的字符是可有可无的
+:其前字符至少1
{m}:其前的字符m次
{m,n}:至少m次,至多n次
{0,n}
{m,}


3:位置锚定
^:行首锚定
$:行尾锚定
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定,用于单词模式的右侧

4:分组及引用 (分组和引用,也就搞定了Python的正则表达式)
( ):分组,括号内的模式匹配到的字符会被记录到正则表达式引擎的内部变量中
后向引用:/1, /2
[root@7 yhy2]# cat yhy
wo love wo
ni love ni
ta love ta
egrep "(w.).*\1" yhy
wo love wo

a | b:表示a或者b ---> grep "a|b" yhy
c|Cat:c或者cat
(c|C)at:cat或者Cat
  • 回顾wc命令:
wc:Word count命令 
-l:显示文件的行数
-w:显示文件的单词数
-c:显示文件的字节数
  • 回顾cut命令:
d :指定分割符
f:指定保留哪一列,例如-f 1,2,7 :表示保留第127列或字段,或者用 1-4:表示14列或字段

(七)今日学习内容sort命令

前言:sort排序是在内存中进行排序的,且排序算法非常的快,默认的排序规则是将文件的内容基于行的首字符进行排序,如果第一个字符相同,那么就比较第二个字符,以此类推,实现快速排序

  • sort排序命令讲解
  • 格式: sort [选项] 文件名 
    • sort /etc/passwd :会将所有的用户从a到z进行排序
  • 常用的选项:
-t:指定字段分隔符,便于指定排序的字段
-k:用于排序比较的字段
sort -t: -k3 -n /etc/passwd 基于用户的uid的大小进行排序
-n:基于数值大小排序
cut -d: -f3 /etc/passwd | sort 按字符进行排序
cut -d: -f3 /etc/passwd | sort -n 按数值大小进行排序
-r:逆序进行排序
sort -t: -k3 -n -r /etc/passwd
-f:忽略字符大小写
这里是由于ASCII码的原因,因为A的ASCII码为:65,a的ASCII码为97
-u:重复的行只保留一份
sort -t: -k7 -u /etc/passwd
  • 练习 
    • 找出/etc/passwd的所有的shell一共有多少种
    • sort -t: -k7 -u /etc/passwd | wc -l

(八)今日学习内容diff和patch命令详解

前言:
diff:逐行比较文件的不同,并且显示出来。
patch: 打补丁工具,将补丁打到老文件里面,也就是diff左边的那个文件,使得老文件和新文件一样

  • 格式:diff [选项] 老文件 新文件
  • 格式:patch [选项] 老文件
  • 效果演示
# 比较两个文件的不同
[root@7 yhy2]# diff fstab.old fstab.new
2c2
< #
---

> # yhy
5c5
< #
---

> # yhy

# 将不同作为补丁输出到fstab.patch
[root@7 yhy2]# diff fstab.old fstab.new > fstab.patch

# 将老文件打补丁
[root@7 yhy2]# patch -i fstab.patch fstab.old
patching file fstab.old

# 再次比较两个文件时,已经没有不同的了
[root@7 yhy2]# diff fstab.old fstab.new

# 还原补丁文件
patch -R -i fstab.patch fstab.old

# 再次比较,发现fstab.old又还原了
[root@7 yhy2]# diff fstab.old fstab.new
2c2
< #
---

> # yhy
5c5
< #
---

> # yhy

(九)今日学习内容vim文本编辑器详解

前言:vim 是一个纯文本编辑器

  • 模式化的编辑器
1:编辑模式
2:输入模式
3:末行模式 : 具有命令的接口,在末行模式中可以直接的通过命令修改vim编辑器打开的文本文件
  • 模式转换
1:编辑模式—>输入模式 
i:insert,表示在光标所在处输入
a: append,在光标所在处的后输入
o:在光标所在处的下一行输入
I:在光标所在行的行首输入
A:在光标所在行的行尾输入
O:在光标所在处的上方输入

2:输入模式—>编辑模式
ESC

3:编辑模式—>末行模式
:

4:末行模式—>编辑模式
ESC
  • 关闭文件
q:  退出, 在没有改变文件内容的情况下推出
q!:不保存强制退出
wq:保存退出
  • 光标的跳转
字符间跳转 
h , l :左 右
k , j: 上 下


单词跳转
w:下一个单词的词尾
e:当前或后一个单词的词尾
b:当前或前一个单词的词首

行首行尾跳转
^:跳转至行首的第一个非空白字符
O:跳转至行首
$:跳转至行尾

行间跳转
数字+G:跳转至(数字)行
1G或gg:跳转至第一行
G:跳转至最后一行

句间跳转
):向后
(:向前

段间跳转
}:向后
{:向前

翻屏操作
Ctrl + f:向文件尾部翻屏
Ctrl+ b:向文件首部翻屏
Ctrl + d:向文件尾部翻半屏
Ctrl + u:向文件首部翻半屏
Enter:按行向后翻屏

  • vim的编辑命令
删除命令 
d:删除命令,可以结合光标跳转字符,实现范围删除
dd:删除光标所在行的整行

粘贴命令
p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方
P:与p相反

复制命令(yank)
y:表示赋值,与d命令相似
yy:复制一整行
1yy:赋值1


撤销(undo)操作
u :撤销之前的操作
  • 末行模式重点讲解(这是学号sed的基础)
1)地址定界 
:start_pos[,end_pos]
#: 特定的第#行,例如5 为第五行
.: 当前行
$:最后一行
#,#:指定行范围,左侧为起始行
#,#+:指定行范围,右侧为左侧行的偏移量 ,例如:3,+7
%:全文
/pattern/:第一次被模式所匹配到的行

2:可实现编辑操作 ,同编辑命令一同使用
d:表示直接删除,要求直接跟在地址定界符号的后面, 例如::.,$d 表示当前行到最后一行删除。
y:用来复制地址定界匹配到的行
c:用来修改地址定界匹配到的行
w /path/to/file :将范围内的文本保存至文件中
r /path/to/file:将指定的文件的文本插入指定位置

3:查找
/pattern:查找模式匹配到的所有字符串,向下查找, 然后在键盘上按n键会继续向下匹配
?pattern: 查找模式匹配到的所有字符串,向上查找,然后在键盘上按n键会继续向上匹配

4:查找并替换(极其重要)
1)格式:地址地接符s/要查找的内容/替换为的内容/修饰符
要查找的内容:可以使用正则表达式
替换为的内容:不能使用正则表达式,但是可以引用
如果使用了分组,也就是在要查找的内容中使用了( )话,可以使用后向引用, \1表示引用第一个括号匹配的内容, \2表示第二个括号匹配的内容, \3表示第三个括号匹配的内容
也可以直接引用查找模式匹配到的整个文本,直接使用匹配模式的全部文本:用&符号引用整个模式匹配到的文本

2)修饰符
i:忽略大小写
g:全局替换,也就是如果不加g的话,那么只是一行匹配一个,如果第二个被匹配了也不会被替换,如果加了g,那么一行中无论匹配到多少个都会被替换

3)可把分隔符替换为非常用的字符
例如:s@@@
s###
  • 练习
  • 1 . 复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符
:%s#^[[:space:]]\+##g
  • 2 :复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件的每一个空白字符开头的行的首行加上#
%s#^[[:space:]]#\#&#g
  • 3 . 为/tmp/grub2.cfg文件的前三行的行首加上#号
1,3s#^.#\#&#
  • 4 . 将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为ennabled=1,所有的gpgcheck=0替换为gpgcheck=1
%s#\(enabled\|gpgcheck\)=0#\1=1#g
  • 定制vim的工作特性 (较为常用) 
    • 1:在末行模式下设定,仅对当前的vim进程有效
    • 2:如果需要永久有效 
      • 对于所有的登入用户有效:/etc/vimrc
      • 对于当前用户有效:~/.vimrc
    • 3:配置语法
1 . 行号 
显示行号:set nu
取消行号:set nonu

2 . 括号匹配高亮
启动括号匹配高亮:set sm
关闭括号匹配高亮:set nosm

3 . 自动缩进功能
启动自动缩进:set ai
关闭自动缩进:set noai

4 .搜索高亮显示
开启搜索高亮显示:set hlsearch
关闭搜索高亮显示:set nohlsearch

5 .语法高亮显示
开启语法高亮:syntax on
关闭语法高亮:syntax off

6 .忽略字符大小写
启用:set ic
禁用:set noic

(十)bash的配置文件详解 
前言:bash的配置文件分为profile类和bashrc类。这两类配置文件都是脚本文件与一般服务的纯文本的配置文件不一样,每一次修改了这两类的配置文件的时候,都需要将配置文件重新运行一次,让用户的bash特性生效


1:bash的配置文件分为两类 
profile类:为交互式登入的shell提供配置
bashrc类:为非交互式登入的shell提供配置

2:登入类型
交互式登入shell进程
直接通过某个终端输入账号和密码登入后打开的shell进程
使用su - USERNAME,执行的登入切换

3:非交互式登入shell进程
su USERNAME ,执行的登入切换
在图形界面下打开的终端
运行脚本

4profile 类脚本文件说明
全局:对所有用户都生效 ,可以修改下面两个配置文件
/etc/profile
/etc/profile.d/*.sh

用户个人:仅对当前用户有效
~/.bash_profile
应用场景:
用于定义环境变量
运行命令或脚本

5:bashrc类
全局:
/etc/bashrc
用户个人 :
~/.bashrc
应用场景:
定义本地变量
定义命令别名, 比如取别名(alias vi='vim'

6: 注意:只有管理员可以修改全局配置文件

7:交互式登入shell进程读取profile和bashrc文件的顺序为:
先读取/etc/profile –> /etc/profile.d/* –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc

8:非交互式登入shell进程读取profile和bashrc文件的顺序为:
先读取~/.bashrc –> /etc/bashrc –> /etc/profile.d/*
原创粉丝点击