正则表达式

grep 命令

选项意义
-c匹配行的数量
-i忽略大小写
-h查询多文件时不显示文件名
-l只列出匹配的文件名,不列匹配行
-n列出匹配行,并列出行号
-s不显示不存在或无匹配的错误信息
-v显示不包含匹配文本的所有行
-w匹配整词
-r递归搜索,搜子目录
-E支持扩展的正则表达式
-F不支持正则表达式


grep -nE "^\w+@\w+\.\w+$" a.txt


sed命令选项
选项意义
-n不打印所有行到标准输出
-e将下一个字符串解析为sed编辑命令,如果只传递一个 -e可以省略
-f正在调用sed脚本文件

sed文本定位方式
选项意义
xx为指定行号
x,y指定从x到y的行号范围
/pattern/查询包含模式的行
/pattern/pattern/查询包含两个模式的行
/pattern/,x从与pattern的匹配行之间的行
x,/pattern/从x号行到与pattern的匹配行之间的行
x,y!不包含x和y行号的行

sed编辑命令
选项意义
p打印匹配行
=打印文件行号
a\在定位行号之后追加文本信息
i\在定位行号之前追加文本信息
d删除定位行
c\用新文本替换定位文本
s使用替换模式替换应用模式
r从另一个文件中读文本
w将文本写入到一个文件
y变换字符
q第一个模式匹配完成后退出
l显示与八进制ASCII代码等价的控制字符
{}在定位行执行的命令组
n读取下一个输入行,用下一个命令处理新的行
h将模式缓冲区文本拷贝到保持缓冲区
H将模式缓冲区文本追加到保持缓冲区
x互换模式缓冲区和保持缓冲区内容
g将保持缓冲区内容拷贝到模式缓冲区
G将保持缓冲区内容追加到模式缓冲区

sed -n '/hello/=' a.txt   打印行号

sed -n '/hello/p' a.txt   打印内容

sed -n '$p' a.txt  打印最后一行

sed -n '/zbq/,$p' a.txt  从匹配的zbq行到最后一行


#!/bin/sed -f
/zbq:/i\  
we insert a new line.

在匹配行上面插入 we insert a new line


sed -n 's/hello/world/w b.txt' a.txt
把 匹配hello行替换world行 并输出到 b.txt中


sed '/hello/r b.txt' a.txt

把匹配的hello用文本b.txt替换

ifconfig | grep 'inet addr' | sed 's/^.*inet addr://g' | sed 's/Mask.*$//g' | sed 's/Bcast.*//g'
只显示ip

awk


变量描述
$n当前记录的第n个字段,字段间由FS分隔。
$0完整的输入记录。
ARGC命令行参数的数目。
ARGIND命令行中当前文件的位置(从0开始算)。
ARGV包含命令行参数的数组。
CONVFMT数字转换格式(默认值为%.6g)
ENVIRON环境变量关联数组。
ERRNO最后一个系统错误的描述。
FIELDWIDTHS字段宽度列表(用空格键分隔)。
FILENAME当前文件名。
FNR同NR,但相对于当前文件。
FS字段分隔符(默认是任何空格)。
IGNORECASE如果为真,则进行忽略大小写的匹配。
NF当前记录中的字段数。
NR当前记录数。
OFMT数字的输出格式(默认值是%.6g)。
OFS输出字段分隔符(默认值是一个空格)。
ORS输出记录分隔符(默认值是一个换行符)。
RLENGTH由match函数所匹配的字符串的长度。
RS记录分隔符(默认是一个换行符)。
RSTART由match函数所匹配的字符串的第一个位置。
SUBSEP数组下标分隔符(默认值是\034)。


awk [-F 域分割符] 'awk程序段' 输入文件

awk -f awk脚本文件 输入文件

./awk脚本文件  输入文件


awk '{print $1,$2}' c.txt
打印第一和第二域  $0是全域

awk -F"\t" '{print $1}' c.txt 
打印以tab键分割的域

awk 'BEGIN {FS=","} {print $1}\' c.txt 
打印以,域

awk 'BEGIN {FS=":"} $1~/bin/' /etc/passwd
打印以【:】为域 第一域匹配bin字符

awk 'BEGIN {FS=":"} {if ($3~10||$4~7) print $0}' /etc/passwd

打印以【:】为域 第三域匹配字符串10 第四域匹配字符串7 

awk '/^$/{print x+=1}' c.txt

打印空白行 行数

#!/usr/bin/awk -f
BEGIN {FS=","}
{
        total=$2+$3+$4
        avg=total/3
        print $1,avg
}
把第2,3,4域相加取平均值

awk 'BEGIN {FS=","} {print NF,NR,$0} END {print FILENAME}' c.txt 
以,为分割符 打印,行号,全部  最后打印文件名


fps = 1
fps = 2
fps = 3
fps = 4
fps = 5

awk -F"=" '{s+=$2} END {printf"avg=%.2f\n", s/NR}'
统计 fps的平均数

为awk传参数 用-v

awk -v name=tom -F',' '{if($1==name) print $0}' a.txt






Logo

更多推荐