【045】Python全栈日记-Linux(三)

一、文本处理工具之grep   (基于行来匹配)

grep

egrep (文本过滤)

fgrep(不支持正则)

 

格式:grep [选项] 模式 文件

 

选项:

--color 指定颜色

-v:反向匹配,显示不能被模式匹配到的行

-o:仅匹配被模式匹配到的字符串,而非整行

-q:静默模式

无返回,可用echo $? 查询结果 0是有结果

-i:不区分大小写,ignore-case

 

 

二、正则表达式

分为基本正则表达式(BRE)和扩展正则表达式(ERE)

元字符:类似通配符,不表示字符本身的意义,用于额外功能性的描述

基本正则表达式的元字符:(出现需要用引号引起来,单引号也可以解释元字符,但不可变量替换)

 

1、匹配单个字符:

创建一个text.txt文档,内容如下

(1).:任意单个字符

如果想匹配.,可以使用转义符\

 

 

[]:指定范围内的任意单个字符 

(2)数字:[0-9],[[:digit:]]

(3)小写字母:[a-z],[[:lower:]]

(4)大写字母:[A-Z],[[:upper:]]

(5)所有的字母:[a-Z],[[:alpha:]]

(6)字母+数字:[0-Z],[[:alnum:]] 

(7)空格:[[:space:]] ,简化写法 [ ]

(8)标点符号:[[:punct:]]

(9)[^]: 指定范围外的任意单个字符

 

 

2、次数匹配:用来指定匹配其前面的字符的次数

(1)*:任意次

例子:x*y xxy xy y 都能匹配

(2).*:匹配任意长度的任意字符

 

\为转义符,因为? {} 在linux中有其他的意思,需要靠转义符来恢复原本的意思

(3)\?:前面字符出现0次或者1次的

\+:前面字符至少一次

\{m\}:匹配m次

\{m,n\}:至少m次,至多n次

\{m,\}:至少m次

\{,n}:至多n次   可以没有

 

当然也可以使用egrep (文本过滤)

就可以不使用转义符,是grep的优化版本

 

 

3、位置锚定:用于指定字符出现的位置

(1) ^:锚定行首

^Char

(2)$:锚定行尾

grepchar$

(3)^$:空白行

取所有非空白行,那几个空行是因为里面有空格,空格也是字符

 

 

 

三、文本处理类的命令

(1)wc: word count

行 单词数 字节数

wc[option][file]...

-l:统计行数

-c:统计字节数

-w:统计单词数

 

知识点补充:

管道:

Linux:

程序=指令+数据

使用目的单一的小程序

组合小程序完成复杂的任务

指令1 | 指令2 | 指令3

把指令1的结果给指令2,再把指令2的结果给指令3

 

 

(2)tr:转换或删除字符,tr ‘集合1’ ‘集合2’,必须使用管道

转换字符:会把第一个字符集的对应转换为第二个字符集中的对应转换

-d:删除出现过的字符集

 

tr不会改变原文件,使用tr把刚才text.Txt文件中的小写字母换成大写

 

 

(3) cut:根据制定的分隔符切片,并显示出需要显示的片

-d字符:指定分隔符

-f数字:指定要显示的字段

单个数字:一个字段

多个离散字段:逗号分隔

多个连续字段:-分隔

 

显示linux中的用户名和uid,passwd中用户每个信息使用:分隔,第一个为用户名,第三个为uid

 

 

(4)sort:按字符进行比较(默认比较码值)

 格式 sort[options] FILE

 -f:忽略大小写

 -n:对数字进行排序

 -t:指定分隔符

 -k数字:指定分隔后进行比较字段

 -u:重复的行,只显示一行

 

按照uid排序用户信息,数字排序-n,:分割-t:,比较uid:-k3

按照uid排序用户信息,并只显示uid最大者的用户名

 

四、find命令

实时查找工具,通过遍历指定路径下的文件系统完成文件查找。

 

1、特点:

查找速度慢

精确查找

实时查找

 

2、语法格式:

find [option]... [查找路径] [查找条件] [处理动作]

 

查找路径:指定具体目标路径;默认为当前目录

查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下所有文件

处理动作:对符合条件的文件做什么操作,默认为标准输出至屏幕。、

   

3、查找条件:

(1)根据文件名查找:

-name "文件名称"  (支持使用glob通配 *,?,[],[^])  例如 find /etc -name "passwd*"

-iname "文件名称" (不区分大小写)

 

(2)根据属主 属组查找

-user USERNAME:查找属主为指定用户的文件

-group GROUPNAME:查找属组为指定用户的文件。

-uid UserID:查找属主为指定UID的文件

-gid GroupID:查找属主为指定GID的文件

-nouser:查找没有属主的文件

-nogroup:查找没有属组的文件

 

       

(3)根据文件类型查找:

-type TYPE:

f:普通文件

d:目录文件

l:符号链接文件

s:套接字文件

b:块设备文件

c:字符设备文件

p:管道文件

 

 

(4)组合条件(与 或 非)

-a与 -o或 -not非

     

(5)根据文件大小来查找:

-size [+|-]num

常用单位:kb,Mb,G

-num:(0,num]

+num:(num,∞)

 

 

(6)根据时间戳:

以“天”为单位:

-atime:访问时间

-mtime:更改时间

-ctime:改动时间

可加:[+|-]

以“分钟”为单位:

-amin

-mmin

-cmin

 

(7)根据权限来查找

-perm [+|-]MODE

 

 

 

4、处理动作

-print:默认动作,输出至屏幕

-ls:类似ls -l命令

-delete:查找出然后删除

-fls /path/to/somefile

-ok COMMAND {} \;对查到的每个文件执行COMMAND命令,对于每个文件执行命令,需交互确认

-exec COMMAND {} \;直接处理,不交互。   {}:用于引用查找到的文件名称本身

 

以上的处理动作要求能看懂,有些老程序员爱使用

现在更加流行使用xargs

find命令不支持管道,那我们可以使用xargs命令强行驱动使用管道

 

 

 

 

五、重定向操作:I/O重定向

重定向某些情况直接覆盖比较危险,覆盖重定向谨慎使用。

1:输入重定向(覆盖和追加)

  < 覆盖  

 << 追加  

标准输入,stdin,0

输入重定向的意思就是从文件中取出数据到指定的文件中

例如我们要创建user,设置密码的时候需要输入两次密码,我们先把密码写在文档中,然后重定向到设置密码的命令处。例如:

 

 

2:输出重定向(覆盖和追加)

>覆盖   

>>追加

(1)标准输出,stdout,1  默认输出重定向,状态码为1

我们可以把指令的结果追加到文档中,例如:

(2)标准错误输出:stderr,2   

当我们写错了指令写入到文档会发生什么?

但是我们同样可以将错误日志写入到文档,只需要使用标准错误输出

(3)混合输出 &

如果我们不知道输入的指令是错误的还是正确的十一使用混合输出

 

 

3、echo命令

echo可以看作python的print()

(1)-n:不输出为新行

用cat查看文档时我们可以用-E查看隐藏符号

$代表此行结束,可以使用-n让行不结束

(2)-e:允许后面的输出进行转义,可末尾接上特殊字符

\n:new line    换行且光标移至行首

\t:horizontal tab  插入制表符,8个格子,如果写入字符超过8个会再扩展8个;

练习题:用echo写一个正方形

 

 

六、VI编辑器的学习

Linux:使用文本文件来保存配置信息

文本编辑器:ASCII文件

emacs vi

vi:Visual Interface(纯字符界面的编辑器)

全屏文本编辑,nano

 

1、vi命令的使用格式

vim [options] /path/to/file

 

 

2、三种模式:编辑模式(命令模式 默认)、输入模式(插入模式)、末行模式(命令接口)

编辑模式:键盘操作通常被解析为编辑命令:

输入模式:写内容的模式

末行模式:vim的内置的命令行接口,执行vim内置命令

vim一进去就是编辑模式。

 

 

3、模式切换

(1)编辑模式-->输入模式

i:当前光标处输入内容 (多用这个)

I:在当前光标所在行的行首

a:在当前光标所在处的后面

A:在当前光标所在行的行尾输入

o:在光标所在行的下方新增一行空白行

O:在光标所在行的上方新增一行空白行

(2)输入模式-->编辑模式

    按ESC

(3)编辑模式-->末行模式

    输入 “:”

(4)末行模式-->编辑模式

    按两次ESC

  

 

4、常用退出指令

(1)在末行模式下

:q!强制退出,不保存并退出

:wq 保存修改并退出

:w  保存不退出

:x,保存并退出

 

(2)编辑模式:

ZZ,保存退出

 

5、常用打开文档命令

分隔窗口打开多个文件

(1)-o:水平分隔:

切换文档:ctrl+w,上下箭头

vim -o 1.txt 2.txt

(2)-O:垂直分隔:

ctrl+w,左右箭头

vim -O 1.txt 2.txt

 

6、编辑模式下操作

【1】移动光标

(1)单字符光标移动

上下左右:jkhl,键盘上下左右键也行

(2)单词间移动:

w:调至下一个单词的词首

b:当前或前一个的词首

e:当前或下一个词的词尾

(3)行内移动:

0:行首

^:第一个非空白字符

$:行尾

(4)句子间移动:

):上一句

(: 下一句

(5)段落间移动:

}:上一段

{:下一段

(6)行间移动:(常用)

#G:第几行 在编辑模式输入数字+G就是跳转到第几行   

gg:第一行

G:最后一行

 

【2】编辑操作

一部分需要输入数的命令显示在这里

x:删除光标所在处的字符

#x:删除光标所在处向后的#个字符

r:替换光标所在处的字符

 

d:删除命令(我们输入的有些命令会在编辑模式最下面,通过d可以删除)

d^ 光标删除至行首

d$ 光标删除至行尾(shift+d)

dd:删除一行

#dd:删除所在行后的#行

 

y:复制命令(复制输入的命令)

yy:复制当前一行   p粘贴

#yy:复制#行

 

p:paste 粘贴

如果复制的是整行

p:把复制的内容粘贴在当前行的下一行

P:把复制复制的内容粘贴在当前行的上一行

如果复制的为非整行

p:把复制的内容粘贴在光标所在字符的后面

P: 把复制的内容粘贴在光标所在字符的前面

 

撤销编辑

u:撤销

#u:最近50次操作

撤销此前的撤销操作:ctrl+r:

 

 

翻屏:

ctrl+f:向文件尾部翻一屏

ctrl+b:向文件首部翻一屏

ctrl+d:向文件尾部翻半屏

ctrl+u:向文件首部翻半屏

Enter:下一行

 

查找:

/keyword:从上往下搜索keyword

?keyword:从下往上搜索keyword

n:往下翻查找的结果

N:往上翻查找的结果

支持正则表达式

 

 

7、vim的可视化模式

编辑模式:

v:按照光标走过的区域选择

V:选择矩形行

ctrl+v:选择矩形

 

 

8、末行模式下

start,end:可以使用绝对定界,也可以使用相对定界

(1).:表示当前行

(2)$:最后一行

(3)$-2:倒数第3行

(4)d: 删除

删除第1到4行::1,4d

(5)y:复制

复制第1到4行::1,4y,然后使用p粘贴

(6)s:替换

如图:

想要替换前5行开头的#,应该这样:

:1,5s /^#/ /  (后面的是空)

(7):set nohlsearch 关闭高亮显示,对当前shell有效

 

9、窗口属性的定义:

末行模式

(1):set nu:输出行号

(2):set nonu

(3):set ai 自动缩进(其他发行版本)

(4):set shiftwidth=4  设置自动缩进空格数为4(ubuntu系统)

(5):set softabstop=4  设置制表符宽度为4

(6):set ic    查找时不考虑大小写

(7):set noic  查找时考虑大小写

 

注意事项:vim编辑器不能同时打开两次或以上,否则会出现交换文件。

 

 

 

 

 

 

作业:

有难度

1:统计出系统内安装的所有软件包的数量

2:找出CPU信息文本中开头为”cpu”(大小写不限)字符的行

3:要求显示/proc/meminfo文件中以B开头的行,以kb(大小写不限)结尾,中间任意长度的任意字符的行。

4:要求在/etc/目录下找到文件类型为普通文件并且文件名为sudoers的文件,然后查看文本文件内生效的配置信息有多少行?(这是一条命令)

5:要求找出系统程序用户UID最大的五位用户,并打印输出至屏幕(只打印用户名)

6:在/etc/fstab找出下出现了字符”ext4”的行,并将找到的行的所有数据信息中的小写字母转换为大写字母,打印输出至屏幕

7:复制/etc/fstab到root家目录,将属主属组更改为当前的普通用户,然后在vi编辑器内将全部的内容进行复制一遍,放在下面。

查找到字符串“even”,然后通过VI编辑器的末行模式将第一行到第六行注释全部取消。再移动到第8行,将当前行以下内容(包括当前行)全部加上注释。

10 yy

p

/even

 

:1,6s/^#/ /

 

8G

:.,$s/^/#/

 

8:复制1-3行到最后,然后将此文件中的6-11行删除。

末行模式::1,3y

编辑模式:

G到底

P粘贴在下面

末行模式:

:6,11d

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值