Linux grep sed awk
正则表达式grep 命令选项意义-c匹配行的数量-i忽略大小写-h查询多文件时不显示文件名-l只列出匹配的文件名,不列匹配行-n列出匹配行,并列出行号-s不显示不存在或无匹配的错误信息-v显示不包含匹配文本的所有行-w匹配整词-r
·
正则表达式
grep 命令
选项 | 意义 |
-c | 匹配行的数量 |
-i | 忽略大小写 |
-h | 查询多文件时不显示文件名 |
-l | 只列出匹配的文件名,不列匹配行 |
-n | 列出匹配行,并列出行号 |
-s | 不显示不存在或无匹配的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 匹配整词 |
-r | 递归搜索,搜子目录 |
-E | 支持扩展的正则表达式 |
-F | 不支持正则表达式 |
grep -nE "^\w+@\w+\.\w+$" a.txt
选项 | 意义 |
---|---|
-n | 不打印所有行到标准输出 |
-e | 将下一个字符串解析为sed编辑命令,如果只传递一个 -e可以省略 |
-f | 正在调用sed脚本文件 |
选项 | 意义 |
---|---|
x | x为指定行号 |
x,y | 指定从x到y的行号范围 |
/pattern/ | 查询包含模式的行 |
/pattern/pattern/ | 查询包含两个模式的行 |
/pattern/,x | 从与pattern的匹配行之间的行 |
x,/pattern/ | 从x号行到与pattern的匹配行之间的行 |
x,y! | 不包含x和y行号的行 |
选项 | 意义 |
---|---|
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'
只显示ipawk
变量 | 描述 |
---|---|
$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
更多推荐
已为社区贡献1条内容
所有评论(0)