仅供本人自学,完全从自己可以理解的角度写的,知识点都是copy网上已有的学习资料,侵权请联系本人删除,谢谢。
1. 文本资料学习
学习Linux,从掌握grep、sed、awk开始吧。
Linux文本三剑客超详细教程—grep、sed、awk
grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
开始copy知识点:
(1) grep
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
egrep = grep -E:扩展的正则表达式 (除了< , > , \b 使用其他正则都可以去掉\)
正则表达式:
(2) sed
功能:主要用来自动编辑一个或多个文件, 简化对文件的反复操作
sed里单引号和双引号的作用区别:
双引号里可以使用shell里的变量;单引号不能。
单引号和双引号里都可以存放模式。
练习题:
shell命令三剑客之sed命令详解
显示文件的第一行,第二行
sed -n ‘1,2p’ sed.txt 或者
sed -n ‘3,$!p’ sed.txt
显示文件的第二行至第五行
sed -n ‘2,5p’ sed.txt 或者
sed -n ‘2,+3p’ sed.txt
显示文件的1,3,5行
sed -n ‘1p;3p;5p’ sed.txt
加入模式
显示包含2的行
sed -n ‘/2/p’ sed.txt
不显示1开头的行
sed -n ‘^1!p’ sed.txt
显示以2结尾的行
sed -n ‘/2$/p’ sed.txt
显示以1和3开头的行
sed -n ‘/ ^ [1,3]/p’ sed.txt
commend操作: d 删除操作
删除空行和注释
sed -r ‘/^$/ ^#/d’ sed.txt 操作:-r 支持扩展正则表达式
删除空行再删除注释
sed -e ‘/^ $/d’ -e ‘/^#/d’ sed.txt 或者
sed ‘/^ $/d;/^#/d’ sed.txt
commend操作: r 读入操作
在sed.txt文件的末尾后面读入/etc/passwd文件的所有内容
sed '/$r /etc/passwd/ sed.txt
commend操作:w 写入操作
将文件/etc/passwd的第一行写到sed.txt文件中
sed ‘1w sed.txt’ /etc/passwd
commend操作:s 替换操作
将sed.txt文件中的空格全部替换为冒号
sed ‘s/ /:/g’ sed.txt
在文件sed.txt的2到3行前面加上注释
sed -n ‘2,3s/^/#/p’ sed.txt
在文件sed.txt的每行末尾加上问号
sed -n ‘s/$/?/p’ sed.txt
(3) awk
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
下面记录博主斯言甚善 写的博文:awk命令的操作,看这一篇文就够了
awk工作流程可分为三个部分:
读输入文件之前执行的代码段(由BEGIN关键字标识);
主循环执行输入文件的代码段;
读输入文件之后的代码段(由END关键字标识)。
2. 视频学习
哔哩哔哩上面观看黑马程序员老师讲的视频,发现正是自己需要的,讲得浅显易懂,我能够学进去对自己而言就是最好的学习资料。附上视频链接如下:
https://www.bilibili.com/video/BV1st411N7WS?p=4&spm_id_from=pageDriver
下面都是我观看视频后的一些笔记(主要是截频)
软件包管理:yum工具
网络协议:
ssh:远程管理协议
scp: 数据同步,不能实现数据的实时同步
文件共享服务
shell通配符
shell小工具的使用:grep、cut、sort
grep:行过滤工具
打印行号
cut:列截取
截取每行的第5个字符
指定冒号":"分隔符,截取第一列和第三列
只去除重复连续的行
tee默认是覆盖写入文件,加“-a”是追加写入
awk是一种编程语言,主要对文本及数据进行处理的。逐行扫描的,从第一行到最后一行,寻找匹配特定模式的行,找到后进行想要的操作。
print是awk的打印函数,可以匹配正则表达式。
gawk是awk的GNU版本。awk软链接到gawk。
统计网站的访问量、IP量。
支持条件判断、循环,比sed强大很多。
单引号中可以使地址定位也可以使执行指令
打印出文件的所有行:
打印文件的第一行至第五行:
NR:地址定位
不加打印peint动作,默认也会打印出来
打印出第一行或者第五行:
打印出以冒号分隔的第一列到最后一列:
$NF是最后一列
打印出以冒号分隔的第一列到最后一列,以及打印出倒数第二列:
打印出文件的列数,awk是逐行处理文本的
练习题:
awk是逐行处理文本的
NR1,NR5和/^root/是两个条件,第一个是第一行的内容,第二个是第五行的内容,第三个是以root开头的行,满足这几个条件的行都会被打印出来。
awk按照分隔符打印出来之后,默认以“空格”分割
用“OFS”指令指定分割符
定义输入间隔符和输出间隔符
不定义输入间隔符,用双引号引起来输出间隔符
RS:定义换行,awk默认换行符结尾的就是一行
RS和ORS了解即可,最常用的是“FS”和“OFS”
print函数会自动换行,printf函数默认不会在结尾自动换行,要加“\n",echo默认不会换行,echo -n才会自动换行
awk中定义变量,变量前不需要加$符号
打印变量3,后面跟了文件名称,awk每行都打印出变量3
不敲BEGIN,敲一下回车键打印出一个变量3
正则表达式
打印1至5行并且包含以root开头的行
前导字符出现一次或多次
$(id -u)==0
计算1-10以内奇数的和
使用awk实现:计算1-10以内奇数的和
awk处理的对象是文本或者数据,管道符前面的是awk的处理对象,处理对象是数据,每处理一行的数据就将数据赋值给$0