sed和awk的使用

本文介绍了Linux中两个强大的命令行工具sed和awk的使用方法。对于sed,讲解了如何删除字符、行以及替换操作,并举例说明了不同参数的用途。在awk部分,阐述了其基本语法、条件表达式和循环的运用,以及如何筛选特定日志信息。这些技巧对于日常的文本处理和日志分析非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、sed的使用

Usage: sed [OPTION]… {script-only-if-no-other-script} [input-file]…

参数:

  • -n : 使用安静输出模式
  • -e : 直接在命令列模式上进行sed的动作编辑
  • -f :直接将sed的动作写在一个文件内
  • -i[SUFFIX], --in-place[=SUFFIX] : 直接修改读取的文件内容,而不是输出到终端
  • -c, --copy : 在-i模式下移动文件时,使用copy代替rename
  • -b, --binary : 兼容二进制文件
  • -l N, --line-length=N : 行数
  • -r, --regexp-extended : 使用正在表达式
  • -s, --separate : 将文件视为各个独立的文件而不是一个长的联系连续输入
  • -u, --unbuffered : 从输入文件读取最少的数据,更频繁的刷新输出
  • -h, --help : 帮助信息
  • -version : 版本信息

动作:

  • a:新增
  • c:取代
  • d:删除
  • i:插入
  • p:打印
  • s:取代

1.删除字符或特定字符前后字符

# 删除前两字符
sed 's/../' aa.txt

# 删除前7个字符
sed 's/.\{7\}//' aa.txt

## 删除最后两个字符
sed 's/..$//' aa.txt

## 删除指定字符":"前两个字符和后两个字符
sed 's/..:..//'

2.删除使用

## 删除某行,没有加-i参数的时候都是不会修改文本内容
sed '3d' aa.txt

## 删除第10到最后一行
sed '10,$d' aa.txt

## 删除所有包含指定字符test的行
sed '/test/d' aa.txt

3.打印

## 打印第n行,sed -n 'np' aa.txt

## 打印第三行
sed -n '3p' aa.txt

## 打印3~5行
sed -n '3,5p' aa.txt

## 打印从第3行到最后一行
sed -n '3,$p' aa.txt

4.替换

## 将所有test替换成check
sed 's/test/check/g' aa.txt
替换中有g和没有g的区别:
  • 有g:替换所有
  • 没有g:只替换每行第一个匹配的

二、awk的使用

使用语法:

awk -f|-F|-v {command;command} 文件

  • -f:调用脚本
  • -F:分隔符
  • -v:变量定义

特定字符含义说明:

  • $0:当前行
  • $1:每行的第一个字段
  • NF:字段数量变量
  • NR:行号
  • FNR:与NR类似,不过文件记录不递增,每个文件都是的从1开始记录
  • FS:定义分隔符
  • RS:输入的记录分隔符,默认为换行符
  • -F’[多个分隔符]’:定义多个分隔符,如-F’[:\t|]’
  • OFS:输出字段分隔符,默认是空格
  • ORS:输出的记录分隔符,默认是换行符
  • &&:逻辑与
  • ||:逻辑或
  • ~:非精确匹配
  • ==:精确匹配
  • !~:不匹配,非精确
  • !=:不等于,精确比较

1.获取某范围时间段的日志信息

## 以# 2022-02开头的在04:30~05:10范围的时间
awk '/^2022-02/ {slow=($NF>"04:30:00.000000+00" && $NF<"05:10:00.000000+00")}slow' slow.log

## 以2022-02-05开头的,时间范围在8点的日志信息
egrep "^2022-02-05 08:[00-59]+.*" xxx.log > aa.log

2.条件表达式

## if条件语句,必须用在{}中,且比较内容需要用小括号()扩起来
awk -F '|' '{if($1~/2022-02-11/) print $1}' aa.txt

## if...else
awk -F '|' '{if($1~/2022-02-11/) print $1 else {print $2}}' aa.txt

## 运算比较
awk '$1<="2022-02-11"{print $1}' aa.txt

3.while使用

## while循环
awk -F '|' 'BEGIN{i=1} {while(i<NF) print NF,$i,i++}' aa.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值