Shell中awk文本处理工具和sed文本处理工具

本文详细介绍了awk编程语言和sed流式编辑器的基本用法,包括语法格式、内建变量、正则表达式应用及常见操作示例。通过具体实例展示了如何进行数据处理和文本过滤。

awk编程语言/数据处理引擎

  • 基于模式匹配检查输入
  • 将期望的匹配结果print到屏幕

语法格式

awk '模式{操作}' 文件1 文件2 ......

示例

awk 'NR==1 {print}' /etc/hosts

常用的内建变量

变量含义
NR当前处理行的行号
FS字段分割,缺省为空格或TAB位
$n当前行的第N个字段
$0当前行的所有文本内容

示例

awk '(NR%2)==1 {print}' file.txt    (输出奇数行)
awk 'NR==1,NR==3 {print}' file.txt  (输出第一行到第三行内容)
awk 'NR==1||NR==3 {print}' file.txt (输出第一行和第三行内容)

使用正则表达式

示例

正则表达式包含在//中间
awk '/2/{print}' file.txt    (输出包含'2'的行)
awk '/bash$/{print}' file.txt  (输出以bash结尾的行)

指定分割、指定输出字段

示例

awk 'NR==2,NR==3{print $1,$3}' file.txt    (默认空格分割,输出第2到第3行的第一和第三个字段)
awk -F. '$5=="benet"{print $0}' file.txt  (用'.'分割,输出第五个字段为benet的整行内容)

Sed流式编辑器/文本过滤

  • 基于模式匹配过滤/修改文本

语法格式

sed '编辑指令' 文件1 文件2 ......
sed -n '编辑指令' 文件1 文件2 ......
sed -i  '编辑指令' 文件1 文件2 ...... (会修改源文件内容)

编辑指令写法

编辑指令格式

* 格式:[地址1[,地址2]]操作类型
* 多条指令之间以分号隔开
* 示例1:sed -n '1p;3p' file.txt
* 示例2:sed -n -e '1p' -e '3p' file.txt  (如有多条指令,在每条指令前加-e)

常用的操作类型

操作符含义
p输出/打印文本行
n取下一行文本(跳过当前行)
d删除
s字符串替换
a追加新的文本

示例

sed -n 'p;n' file.txt   (输出所有奇数行)
sed -n 'n;p' file.txt   (输出所有偶数行)
sed '2,3d' file.txt     (删除第2行到第3行)
sed '/w2k8/d;$d' file.txt  (删除包含w2k8的行和最后一行)
sed '/w2k8/!d' file.txt (删除不包含w2k8的行)
sed '3,4s/hunter/xxx/g' file.txt (将第3行到第4行中的hunter替换为xxx)
sed '1,2s/^/#/g' file.txt   (将第1行到第2行的行首加上#)
sed '1,2s/ter//g' file.txt  (删除第1行到第2行中的ter)

使用正则表达式

sed -n '/w2k8/,$p' file.txt        (从包含w2k8的行到最后一行)
sed -n '/\<This\>/p' file.txt   (输出包含单词This的行)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值