grep、sed和awk命令的简单使用

简介:

                 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文本定位方式 选项 意义 x x为指定行号 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行到最后一行



[plain]

  1. #!/bin/sed -f  

  2. /zbq:/i\    

  3. we insert a new line.  

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



[plain] 

  1. sed -n 's/hello/world/w b.txt' a.txt  

把 匹配hello行替换world行 并输出到 b.txt中



[plain] 

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


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


[plain] 

  1. 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脚本文件  输入文件



[plain]

  1. awk '{print $1,$2}' c.txt  

打印第一和第二域  $0是全域



[plain] 

  1. awk -F"\t" '{print $1}' c.txt   

打印以tab键分割的域



[plain]

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

打印以,域



[plain] 

  1. awk 'BEGIN {FS=":"} $1~/bin/' /etc/passwd  

打印以【:】为域 第一域匹配bin字符



[plain] 

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


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

[plain] 

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

打印空白行 行数

[plain] 

  1. #!/usr/bin/awk -f 

  2. BEGIN {FS=","}  

  3. {  

  4.         total=$2+$3+$4  

  5.         avg=total/3  

  6.         print $1,avg  

  7. }  

把第2,3,4域相加取平均值


[plain] 

  1. awk 'BEGIN {FS=","} {print NF,NR,$0} END {print FILENAME}' c.txt   

以,为分割符 打印,行号,全部  最后打印文件名


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

[plain] 

  1. awk -F"=" '{s+=$2} END {printf"avg=%.2f\n", s/NR}'  

统计 fps的平均数



本文转自 游骑兵vtx 51CTO博客,原文链接:http://blog.51cto.com/qibingtuan/1979097

相关文章
|
3月前
|
Unix Perl
sed的具体用法
sed的具体用法
19 2
|
3月前
|
Perl
sed的复杂用法
sed的复杂用法
28 2
|
11月前
|
Perl
sed 基本用法
sed 基本用法
65 0
|
11月前
|
Unix Shell Linux
两个实用的shell命令:sed和awk用法
两个实用的shell命令:sed和awk用法
96 0
|
存储 Shell 文件存储
Shell三剑客(grep、sed、awk)(上)
Shell三剑客(grep、sed、awk)(上)
110 0
Shell三剑客(grep、sed、awk)(上)
|
存储 Shell 数据安全/隐私保护
Shell三剑客(grep、sed、awk)(下)
Shell三剑客(grep、sed、awk)(下)
101 1
Shell三剑客(grep、sed、awk)(下)