Linux三剑客命令
这三个命令用法很多,也非常繁琐,可能几天也讲不完,但针对我们学习大数据,学会基本的,剩下去扩展即可
grep
grep:常用于查找文件里符合条件的字符串
grep -i:忽略大小写查找
grep +正则表达式
过滤以h开头 忽略大小写的信息
grep -n 快速定位位置
过滤所有Python进程信息
ps -ef | grep python
sed
接下来我们看一下Linux的第二个剑客,sed
之前我们修改文件是使用vi命令,大家可以想象一个场景,如果让你同时去修改上千个文件里面的某一行内容,你再使用vi去操作,是不是有点手软,虽然这个上千个文件有点夸张,但是在实际工作中类似这样同时修改10几个文件的场景还是有的,大家不要想着,就10几个文件,我使用vi命令不到10分钟就搞完了,如果你这样想,那就完了,程序员一定要懒,这个懒是指能用程序去做的,千万不要动手。
假设你花费5分钟写一个自动化程序,然后可以在秒级别内解决掉这十几个文件,这样是不是还剩下5分钟时间,把这5分钟时间花在陪女神聊天上面难道不香吗?
首先看一下,如何通过sed命令向文件中添加一行内容,
我的需求是这样的,我想要在hello.txt文件的第二行内容下面添加一行内容
添加数据
注意了,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据,最终把缓冲区内的数据输出到控制台
sed '1a\haha' hello.txt 此操作会将数据添加到第一行下面(也就是第二行的位置)
sed '0a\haha' hello.txt 此操作会报错,行号是从1开始的
a参数是在后面添加
i参数是在前面添加
我们可以通过一个特殊参数 $ 表示在最后一行添加
删除数据
删除文件中的第7行内容
$参数,,删除最后一行
替换操作
sed后面的参数格式为[address]s/pattern/replacement/flags
这里的address 表示指定要操作的具体行,是一个可选项
s 表示替换操作,pattern 指的是需要替换的内容,replacement 指的是要替换的新内容,flags有多种用法,我们挑两种说一下
第一种就是flags可以表示为1~512之间的任意一个数字,表示指定要替换的字符串在这一行中出现第几次时才进行替换
第二种就是flags可以直接表示为g,这样的意思就是对每一行数据中所有匹配到的内容全部进行替换
如果flags位置的值为空,则只会在第一次匹配成功时做替换操作
只替换指定内容:增加address参数即可
修改操作
加-i参数即可
举例:
awk
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑
awk的基本格式:awk [option] programe file
这里的option是一个可选项,一般在这里来指定文件中数据的字段分隔符
programe 是具体的处理逻辑
file表示我们要操作的文件
在具体使用awk之前我们还需要掌握awk的一个特性,就是awk在处理文本数据的时候,它会自动给每行中的每个字段分配一个变量
变量从1开始,
$1表示是文本中的第1个数据字段
$2表示是文本中的第2个数据字段
以此类推。
还有一个特殊的 $0 它代表整个文本行的内容
我们来用awk操作 hello.txt
option里面指定字段分隔符,通过-F 参数
awk -F: '{print $1}' /etc/passwd
awk '/hello/ {print $1}'hello.txt
这种写法表示对每次读取到的那一行数据进行匹配
awk '($1 ~ /hello/) {print $1}'hello.txt
在这里面可以通过$来指定具体是哪一列,需要把具体的对比逻辑放到小括号里面