grep-awk-seq快速上手文档
grep 正则 文件内容查找
特定字符匹配
grep '1' /usr/local/logs
范围内字符:单个字符[]
grep '[a-zA-Z]' /usr/local/logs
空行
grep '^$' /usr/local/logs
匹配包含 e f
grep 'e.*f' /usr/local/logs
seq 文本处理(增 删 替) 不会改变原文件内容 除非重定向 > 或 >> (原理一行一行写入缓存再处理)
命令行格式
sed [options] 'command' file(s) 或 |sed [options] 'command' (处理从 | 或 files)
options: -e -n(打印相关的行)
command: 待定位(正则)+sed命令(操作)
sed 'p' /usr/local/logs 重复数据
sed -n 'p' /usr/local/logs 正常数据
定位一行输入出 x(行号); /正则patten/
nl /usr/local/logs | sed -n '10p' (nl 显示行号 显示第10行)
nl /usr/local/logs | sed -n '/foundByte/p' (nl 显示行号)
定位几行
nl /usr/local/logs | sed -n '10,20p' (nl 显示行号 显示第10-20行)
nl /usr/local/logs | sed -n '/first/,/last/p' (nl 显示行号 显示开始first行 结束last)
!p 定位取反
1~20 每次间隔20输入出
q:退出sed
sed -n '10q' 11不执行了
sed -n '/foundByte/q' foundByte后面不执行了
基本命令操作
-a(新增行后)/i(插入行前)
-c(替换行)
-d(删除行)
-a
nl /usr/local/logs | sed '1,5i=====' (1到5行第行前增加=====行)
-c 行
nl /usr/local/logs | sed '1,5c=====' (1到5行替换成=====)
-d
nl /usr/local/logs | sed '/first/d=====' (first行删除=====)
配置文件增加行
sed '$a \ oneline \n twoline' /usr/local/logs
转义空格 换行 重定向
-s 每一行第一个匹配内容替换
nl /usr/local/logs | sed 's/false/true/' (把内容 false 替换 true)
nl /usr/local/logs | sed 's/false/true/g'
s/false/falseaa/ 等价于 s/false/&aa/
s/false/as/ 等价于 s/f\(a\)l\(s\)e/\1\2/ \(\) \1
\u\l\U\L 转换为大/小写 s/false/\ufalseaa/ 等价于 s/false/\u&aa/
案例显示网卡ip
ifconfig eth0 | sed -n '/inet /p' |sed 's/inet.*r://'|sed 's/B.*$//'
网卡信息 | ip行 |ip 前替换空格 |ip 后替换空格
ifconfig eth0 | sed -n '/inet /p' |sed 's/inet.*r:\([0-9.]\+\).*$/\1/'
sed高级命令
-{}:多个sed命令 用;分开
nl /usr/local/logs | sed '{20,30d;s/false/true/}'
先删除 再替换
n 读取下一个输入行
nl /usr/local/logs | sed -n '{n,p}' 偶数行
nl /usr/local/logs | sed -n '{p,n}' 奇数行
数据筛选
passwd 格式 lzm 1000 1000
lzm:x:1000:1000:Centos,,,:/home/lzm:/bin/bash
sed 's/\(^[a-z_-]\+\):x:\([0-9]\+\):\([0-9]\+\):.*$/USER:\1 UID:\2 GID:\3' passwd
-r sed '3r 123.txt' abc.txt 把123.txt整个文件内容写入到匹配到abc.txt 第3行后面 两个文件内容都不变
-w sed '2w abc.txt' 123.txt 把123.txt第2行 写入到abc.txt内 abc.txt 只有第2行数据 abc.txt文件改变
脚本格式
sed -f scriptfile file(s)
awk 文档
awk处理方式
行处理 并切片处理
格式
命令行格式
awk [options] 'command' file(s)
基本格式
awk [options] 'command' file(s)
command:pattern(正则;逻辑判断式){awk操作命令}
awk操作命令: 内置函数:print() printf() getline...;
控制指令:if(){...}else{...}; while(){...};\
awk内置参数应用
awk内置变量1
$0:当前行
$1:每行第一个字段
$2:每行第二个字段 ....
awk内置参数:分割符
options: -F field-separator(默认空格)
例如: awk -F ':' '{print $1 \t $3}' /etc/passwd
awk内置变量2
NR: 每行的记录号
NF: 字段数量变量
FILENAME: 正在处理的文件名
案例 print printf
awk -F ':' '{print "行号:"NR,"每行总变量数:"NF,"用户名:"$1}' /etc/passwd
awk -F ':' '{print "行号:%3s 每行总变量数:%s 用户名:%s,NR,NF,$1}' /etc/passwd %3s 点三个位置
数量比较
awk -F ':' '{if($3>100) print "行号:"NR,"每行总变量数:"NF,"用户名:"$1}' /etc/passwd
awk -F ':' '$3>100{print "行号:"NR,"每行总变量数:"NF,"用户名:"$1}' /etc/passwd
sed '/Error/p' error.log | awk '{print $1}'
= awk '/Error/{print $1}' error.log
awk 逻辑判断式
awk 逻辑
~ !~ : 匹配正则表达式
== != < > : 判断逻辑表达式
例如 awk -F ':' '$1~/^m.*/{print $1}' /etc/passwd
扩展格式
awk [options] 'command' file(s)
command2扩展
BEGIN{print "start"} pattern{commands}END{print "end"}
案例: passwd 制表
awk -F ':' 'BEGIN{print "行号 列变量总数 用户名"}{print NR,NF,$1}END{print"-------"FILENAME"------"}' passwd
案例: 文件夹下文件大小
ls -l | awk -F ':' 'BEGIN{size=0}{size+=$5}END{print" size is" size/1024/1024"M"}'
案例 统计显示/etc/passwd的账户总人数
awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print" count = " count}' passwd
案例 统计显示/etc/passwd UID大于100的用户名
awk -F ':' 'BEGIN{count=0}{if($3>100) name[count++]=$1}END{for(i=0;i<count;i++) print i,name[i]}' passwd
案例 统计netstat -anp 状态下为LISTEN和CONNECTED的连接数量
netstat -anp | awk '$6~/CONNECTED|LISTEN/{sum[$6]++}END{for(i in sum) print i,sum[i]}'
脚本格式
awk -f awk-script-file file(s)
grep 正则 文件内容查找
特定字符匹配
grep '1' /usr/local/logs
范围内字符:单个字符[]
grep '[a-zA-Z]' /usr/local/logs
空行
grep '^$' /usr/local/logs
匹配包含 e f
grep 'e.*f' /usr/local/logs
seq 文本处理(增 删 替) 不会改变原文件内容 除非重定向 > 或 >> (原理一行一行写入缓存再处理)
命令行格式
sed [options] 'command' file(s) 或 |sed [options] 'command' (处理从 | 或 files)
options: -e -n(打印相关的行)
command: 待定位(正则)+sed命令(操作)
sed 'p' /usr/local/logs 重复数据
sed -n 'p' /usr/local/logs 正常数据
定位一行输入出 x(行号); /正则patten/
nl /usr/local/logs | sed -n '10p' (nl 显示行号 显示第10行)
nl /usr/local/logs | sed -n '/foundByte/p' (nl 显示行号)
定位几行
nl /usr/local/logs | sed -n '10,20p' (nl 显示行号 显示第10-20行)
nl /usr/local/logs | sed -n '/first/,/last/p' (nl 显示行号 显示开始first行 结束last)
!p 定位取反
1~20 每次间隔20输入出
q:退出sed
sed -n '10q' 11不执行了
sed -n '/foundByte/q' foundByte后面不执行了
基本命令操作
-a(新增行后)/i(插入行前)
-c(替换行)
-d(删除行)
-a
nl /usr/local/logs | sed '1,5i=====' (1到5行第行前增加=====行)
-c 行
nl /usr/local/logs | sed '1,5c=====' (1到5行替换成=====)
-d
nl /usr/local/logs | sed '/first/d=====' (first行删除=====)
配置文件增加行
sed '$a \ oneline \n twoline' /usr/local/logs
转义空格 换行 重定向
-s 每一行第一个匹配内容替换
nl /usr/local/logs | sed 's/false/true/' (把内容 false 替换 true)
nl /usr/local/logs | sed 's/false/true/g'
s/false/falseaa/ 等价于 s/false/&aa/
s/false/as/ 等价于 s/f\(a\)l\(s\)e/\1\2/ \(\) \1
\u\l\U\L 转换为大/小写 s/false/\ufalseaa/ 等价于 s/false/\u&aa/
案例显示网卡ip
ifconfig eth0 | sed -n '/inet /p' |sed 's/inet.*r://'|sed 's/B.*$//'
网卡信息 | ip行 |ip 前替换空格 |ip 后替换空格
ifconfig eth0 | sed -n '/inet /p' |sed 's/inet.*r:\([0-9.]\+\).*$/\1/'
sed高级命令
-{}:多个sed命令 用;分开
nl /usr/local/logs | sed '{20,30d;s/false/true/}'
先删除 再替换
n 读取下一个输入行
nl /usr/local/logs | sed -n '{n,p}' 偶数行
nl /usr/local/logs | sed -n '{p,n}' 奇数行
数据筛选
passwd 格式 lzm 1000 1000
lzm:x:1000:1000:Centos,,,:/home/lzm:/bin/bash
sed 's/\(^[a-z_-]\+\):x:\([0-9]\+\):\([0-9]\+\):.*$/USER:\1 UID:\2 GID:\3' passwd
-r sed '3r 123.txt' abc.txt 把123.txt整个文件内容写入到匹配到abc.txt 第3行后面 两个文件内容都不变
-w sed '2w abc.txt' 123.txt 把123.txt第2行 写入到abc.txt内 abc.txt 只有第2行数据 abc.txt文件改变
脚本格式
sed -f scriptfile file(s)
awk 文档
awk处理方式
行处理 并切片处理
格式
命令行格式
awk [options] 'command' file(s)
基本格式
awk [options] 'command' file(s)
command:pattern(正则;逻辑判断式){awk操作命令}
awk操作命令: 内置函数:print() printf() getline...;
控制指令:if(){...}else{...}; while(){...};\
awk内置参数应用
awk内置变量1
$0:当前行
$1:每行第一个字段
$2:每行第二个字段 ....
awk内置参数:分割符
options: -F field-separator(默认空格)
例如: awk -F ':' '{print $1 \t $3}' /etc/passwd
awk内置变量2
NR: 每行的记录号
NF: 字段数量变量
FILENAME: 正在处理的文件名
案例 print printf
awk -F ':' '{print "行号:"NR,"每行总变量数:"NF,"用户名:"$1}' /etc/passwd
awk -F ':' '{print "行号:%3s 每行总变量数:%s 用户名:%s,NR,NF,$1}' /etc/passwd %3s 点三个位置
数量比较
awk -F ':' '{if($3>100) print "行号:"NR,"每行总变量数:"NF,"用户名:"$1}' /etc/passwd
awk -F ':' '$3>100{print "行号:"NR,"每行总变量数:"NF,"用户名:"$1}' /etc/passwd
sed '/Error/p' error.log | awk '{print $1}'
= awk '/Error/{print $1}' error.log
awk 逻辑判断式
awk 逻辑
~ !~ : 匹配正则表达式
== != < > : 判断逻辑表达式
例如 awk -F ':' '$1~/^m.*/{print $1}' /etc/passwd
扩展格式
awk [options] 'command' file(s)
command2扩展
BEGIN{print "start"} pattern{commands}END{print "end"}
案例: passwd 制表
awk -F ':' 'BEGIN{print "行号 列变量总数 用户名"}{print NR,NF,$1}END{print"-------"FILENAME"------"}' passwd
案例: 文件夹下文件大小
ls -l | awk -F ':' 'BEGIN{size=0}{size+=$5}END{print" size is" size/1024/1024"M"}'
案例 统计显示/etc/passwd的账户总人数
awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print" count = " count}' passwd
案例 统计显示/etc/passwd UID大于100的用户名
awk -F ':' 'BEGIN{count=0}{if($3>100) name[count++]=$1}END{for(i=0;i<count;i++) print i,name[i]}' passwd
案例 统计netstat -anp 状态下为LISTEN和CONNECTED的连接数量
netstat -anp | awk '$6~/CONNECTED|LISTEN/{sum[$6]++}END{for(i in sum) print i,sum[i]}'
脚本格式
awk -f awk-script-file file(s)