首页 > 其他分享 >grep、sed和awk命令的简单使用

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

时间:2023-06-26 15:32:28浏览次数:46  
标签:grep 打印 sed awk 缓冲区 匹配 txt


                            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行到最后一行



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


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


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


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


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


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

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


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


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


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


打印以tab键分割的域


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


打印以,域

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


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


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


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


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


打印空白行 行数


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域相加取平均值


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

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


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


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


    统计 fps的平均数

    标签:grep,打印,sed,awk,缓冲区,匹配,txt
    From: https://blog.51cto.com/u_16131207/6554928

    相关文章