Linux文本处理三剑客
Linux三剑客具体指什么?
第一个工具是 grep,grep 会根据正则表达式查找相关内容并打印对应的数据。
第二个工具是 awk,awk 的名字来源于三个作者的名字简称,它可以根据定位到的数据行处理其中的分段。
第三个工具是 sed,它是 stream editor 流式编辑器的简称,可以定位到数据行并对数据进行增删改查操作。
Linux三剑客价值通过对三剑客与 SQL 进行类比,来具体看看它们到底能做些什么?
grep 相当于 SQL 的 select *from table,它可以进行数据的查找与定位。
awk 相当于 SQL 的 select field from table,它可以进行数据切片。
sed 相当于 SQL 的 update table set field=new where field=old,它可以对数据进行修改。
你可以发现,grep 和 awk 可以进行组合使用,来达到查找数据并对数据进行分割的目的,grep 也可以与 sed 组合使用,达到查找数据并修改的目的,它们三个还可以组合在一起使用来完成一系列的操作,就相当于大数据处理中的 Map-Red ...
三剑客之sed
介绍基础介绍
sed(Stream Editor),流编辑器。对标准输出或文件逐行进行处理
语法格式
第一种形式:stdout | sed [option] “pattern command”
第二种形式:sed [option] “pattern command” file
处理过程sed 编辑器逐行处理文件(或输入),并将输出结果发送到屏幕。 sed 的命令就是在 vi和 ed/ex 编辑器中见到的那些。 sed 把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模式空间或临时缓冲。sed 处理完模式空间中的行后(即在该行上执行 sed 命令后),就把改行发送到屏幕上(除非之前有命令删除这一行或取消打印操作)。 sed 每处理完输入文件的最后一行后, sed 便结束运行。 sed 把每一行都存在临时缓存区中,对这个副本进行编辑,所以不会修改或破坏源文件。
sed选项
选项
含义
-n
只打印模式匹配行
-e
直接在命令行进行sed编辑,默认选项
-f
编辑动作保存在文件中,指定文件执行
-r
支持扩展正则表达式
-i
直接修改文件内容
sed ...
Shell编程中常用查找命令
文件查找之find命令语法格式find [路径] [选项] [操作]
选项参数对照表
选项
含义
-name
根据文件名查找
-perm
根据文件权限查找
-prune
该选项可以排除某些查找目录
-user
根据文件属主查找
-group
根据文件属组查找
-mtime -n|+n
根据文件更改时间查找,按天
-nogroup
查找无有效属组的文件
-nouser
查找无有效属主的文件
-newer file1 ! file2
查找更改时间比file1 新但比file2旧的文件
-type
按文件类型查找
-size -n +n
按文件大小查找
-midepth n
从n级子目录开始搜索
-maxdepth n
最多搜索到n级子目录
练习
选项
子选项
说明
命令
-name
查找/etc目录下以conf结尾的文件
find /etc -name ‘*conf’
-iname
查找当前目录下文件名为aa的文件,不区分大小写
find . -iname aa
-user
查找文件属主为hdfs的所有文 ...
Shell函数高级用法
函数定义和使用函数介绍
Linux Shell中的函数和大多数编程语言中的函数一样
将相似的任务或代码封装到函数中,供其他地方调用
语法格式
第一种格式
1234567name(){ command1 command2 ... comandn}
第二种格式
1234567function name{ command1 command2 ... comandn}
如何调用函数
直接使用函数名调用,可以将其想象成Shell中的一条命令
函数内部可以直接使用参数$1、$2...$n
调用函数:function_name $1 $2
练习需求描述:写一个监控nginx的脚本:如果nginx服务宕掉,则该脚本可以检测到并将进程启动;如果正常运行,则不做任何操作
1234567891011121314151617#!/bin/bash#this_pid=$$ # 获取当前进程的pidwhile truedo ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/null i ...
三剑客之awk
简介
awk是一个文本处理工具,通常用于处理数据并生成结果报告
awk的命名是它的创始人Alfred Aho、Peter Weinberger和Brian Kernighan姓氏的首个字母组成的
工作模式
读:从文件、管道或标准输入中读入一行然后把它存放到内存中
执行:对每一行数据,根据AWK命令按顺序执行。默认情况是处理每一行数据,也可以指定模式
重复:一直重复上述两个过程直到文件结束
语法格式
第一种形式:awk 'BEGIN{}pattern{commands}END{}' filename
第二种形式:standard output | awk 'BEGIN{}pattern{commands}END{}'
语法格式说明
语法格式
解释
BEGIN{}
正式处理数据之前执行
pattern
匹配模式
{commands}
处理命令,可能多行
END{}
处理完所有匹配数据后执行
内置变量内置变量对照表
内置变量
含义
$0
整行内容
$1-$n
当前行的第1~n个字段
NF (Number Field)
当前行的字段个数, ...
三剑客之grep
三剑客之grepGrep 是 Global Regular Expression Print 的缩写,它搜索指定文件的内容,匹配指定的模式,默认情况下输出匹配内容所在的行。注意,grep 只支持匹配而不能替换匹配到的内容。
grep语法格式
第一种:grep [option] [pattern] [file1,file2,…]
第二种:commond | grep [option] [pattern]
grep参数
选项
含义
-v
不显示匹配行信息
-i
搜索时忽略大小写
-n
显示行号
-r
递归搜索
-E
支持扩展正则表达式
-F
不an正则表达式匹配,按照字符串字面意思匹配
-A
n可以输出匹配行后的n行
-C
n可以输出匹配行前后的n行
-c
只显示匹配行总数
-w
匹配整词
-x
匹配整行
-l
只显示文件名,不显示内容
-s
不显示错误信息
练习必须掌握
选项
说明
命令
-v
显示不匹配pattern行
grep python filegrep -v python file
-i
搜索时忽略 ...
Linux ps命令
Linux ps命令有时候系统管理员可能只关心现在系统中运行着哪些程序,而不想知道有哪些进程在运行。由于一个应用程序可能需要启动多个进程。所以在同等情况下,进程的数 量要比程序多的多。为此从阅读方面考虑,管理员需要知道系统中运行的具体程序。要实现这个需求的话,就需要利用命令ps来帮忙。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多 的资源等等。总之大部分信息都是可以通过执行该命令得到的。ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。
命令使用方式命令:ps [options] [--help]
使用权限:所有使用者
说明:显示瞬间行程 (process) 的动态
参数:ps的参数非常多, 以下列出常用参数
-A: 显示所有进程(等价于-e)(utility)
-a: 显示一个终端的所有进程,除了会话引线
-N: 忽略选择
-d: 显示所有进程,但省略所有的会话引线 ...
Shell实战
Linux常用命令命令分类
文件:everything is file
进程:文件的运行形态
网络:特殊文件
文件
磁盘与目录:df、ls、cd、pwd、$PWD
文件编辑:交互编辑vim、流式编辑器sed
文件权限:chmod、chown
文件搜索:find
文件内容:cat、more、less、grep
特殊文件:软链、socket:进程通讯、管道:进程通讯
文件权限
ls -l查看权限
文件、目录
用户、组
读、写、执行、SUID、SGID
chmod:修改归属者
chgrp:修改归属组
进程
top
ps
网络
netstat -tlnp
netstat -tnp
Mac与Linux不一致:netstat -p tcp -n -a
Shell Piping管道Shell输入输出
read用来读取输入,并赋值给变量
echo、printf可以简单输出变量
>file将输出重定向到另一个文件
>>表示追加等价于tee -a
<file输入重定向
|表示管道,也就是前一个命令的输出传入下一个命令的输入
文件描述
输入文件——标准输入0
输出文件—— ...
Shell基础语法
变量自定义变量变量名遵循原则
变量是由任何字母、数字和下划线组成的字符串,且不能以数字开头
区分字母大小写,例如Var1和var2是不同的
变量、等号、值中间不能出现任何空格
变量引用
var1=hello
echo $var1
123456789101112131415161718[root@localhost ~]# var1=hello[root@localhost ~]# echo $var1hello[root@localhost ~]# var_2=world[root@localhost ~]# echo $var_2world[root@localhost ~]# echo $var1+$var_2hello+world[root@localhost ~]# 1var=jeck # 变量不能以数字开头-bash: 1var=jeck: 未找到命令[root@localhost ~]# var_a=123[root@localhost ~]# Var_a=abc[root@localhost ~]# echo $var_a123[root@localhost ~]# ...
Linux之curl
Linux之curlcurlcurl官网
简介curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思
安装Mac
1brew install curl
使用不带有任何参数时,curl 就是发出 GET 请求。
1root@ubuntu:~# curl http://www.baidu.com
参数:-A-A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]。
1root@ubuntu:~# curl -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' http://www.baidu.com
上面命令将User-Agent改成 Chrome 浏览器。
1root@ubuntu:~# curl -A '' http://www.baidu.com
上面命令会移除Us ...