悟懂Linux第19章shell编程-初识sed和gawk④实例与小结

490 篇文章 8 订阅
394 篇文章 2 订阅

悟懂Linux第19章shell编程-初识sed和gawk④实例与小结

第 19章 初识sed和gawk

在这里插入图片描述

本章内容
 学习sed编辑器
 gawk编辑器入门
 sed编辑器基础

到目前为止, shell脚本最常见的一个用途就是处理文本文件。检查日志文件、读取配置文件、处理数据元素,shell脚本可以帮助我们将文本文件中各种数据的日常处理任务自动化。但仅靠shell脚本命令来处理文本文件的内容有点勉为其难。如果想在shell脚本中处理任何类型的数据,你得熟悉Linux中的sed和gawk工具。这两个工具能够极大简化需要进行的数据处理任务。

19.3 实例与小结

虽然shell脚本本身完成很多事情,但单凭shell脚本通常很难处理数据。Linux提供了两个方便的工具来帮助处理文本数据。作为一款流编辑器,sed编辑器能在读取数据时快速地自动处理数据。必须给sed编辑器提供用于处理数据的编辑命令。
gawk程序是一个来自GNU组织的工具,它模仿并扩展了Unix中awk程序的功能。gawk程序内建了编程语言,可用来编写处理数据的脚本。你可以用gawk程序从大型数据文件中提取数据元素,并将它们按照需要的格式输出。这非常便于处理大型日志文件以及从数据文件中生成定制报表。
使用sed和gawk程序的关键在于了解如何使用正则表达式。正则表达式是为提取和处理文本文件中数据创建定制过滤器的关键。下一章将会深入经常被人们误解的正则表达式世界,并演示如何构建正则表达式来操作各种类型的数据。

本文将简单介绍sed和gawk的基本概念和应用,包括替换、删除、插入、打印和格式化等操作,并且会提供一些实用的例子来加深理解。

一、sed
在这里插入图片描述

  1. sed的概念

sed是流编辑器(stream editor)的缩写,其功能是对数据流进行编辑处理。在Linux中,数据流指的是通过管道或重定向传输的文本数据。sed通常结合正则表达式使用,用于文本处理。

  1. sed的基本用法
    在这里插入图片描述

sed命令的基本语法为:

sed [选项] '动作' 文件名

其中选项包括:

  • -n:不输出模式空间的内容,通常与p命令一起使用。
  • -i:直接修改文件,即进行原地编辑。
  • -e:多条命令使用的分隔符。
  • -r:使用扩展正则表达式。

动作是指sed进行的具体操作,包括:

  • 替换:s命令
  • 删除:d命令
  • 插入:i命令
  • 打印:p命令
  • 格式化:y命令
  1. sed的操作

(1)替换
在这里插入图片描述

替换是sed最常用的操作之一,其基本语法为:

sed 's/原始字符串/新字符串/g' 文件名

其中,s表示进行替换操作,/g表示全部替换。

例如,将文件test.txt中所有的“apple”替换为“orange”,可以使用以下命令:

sed 's/apple/orange/g' test.txt

(2)删除

删除操作用于删除文件中匹配到的内容,其基本语法为:

sed '行号d' 文件名

其中,d表示删除操作。

例如,删除文件test.txt中的第2行,可以使用以下命令:

sed '2d' test.txt

(3)插入
在这里插入图片描述

插入操作用于向文件中插入新内容,其基本语法为:

sed '行号i\ 插入内容' 文件名

其中,i表示插入操作,\用于换行,后面紧跟着插入的内容。

例如,在文件test.txt的第2行前插入新内容“hello”,可以使用以下命令:

sed '2i\ hello' test.txt

(4)打印

打印操作用于输出文本中的内容,其基本语法为:

sed '行号p' 文件名

其中,p表示打印操作。

例如,打印文件test.txt中的第2行,可以使用以下命令:

sed '2p' test.txt

(5)格式化

格式化操作用于将文本中的一些字符替换为其他字符,其基本语法为:

sed 'y/原始字符/新字符/' 文件名

其中,y表示格式化操作。

例如,将文件test.txt中所有的小写字母替换为大写字母,可以使用以下命令:

sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' test.txt
  1. sed的实例

(1)将文件中的aaa替换为bbb,并保存到新文件中

sed 's/aaa/bbb/g' input.txt > output.txt

(2)将文件中第10行删除,并在原文件上进行原地编辑

sed -i '10d' input.txt

(3)将文件中的bbb插入到第5行之前,并在原文件上进行原地编辑

sed -i '5i\bbb' input.txt

(4)将文件中第3行的内容打印出来

sed -n '3p' input.txt

(5)将文件中所有的小写字母替换为大写字母,并在原文件上进行原地编辑

sed -i 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' input.txt

二、gawk

  1. gawk的概念

gawk(GNU Awk)是一个强大的文本处理工具,用于在文本中查找、匹配和处理数据。gawk是Linux系统中最常用的工具之一,可以通过命令行进行使用。

  1. gawk的基本用法

gawk命令的基本语法为:

gawk 'pattern { action }' filename

其中,pattern是gawk进行匹配的模式,action是gawk进行操作的命令,可以为空。

  1. gawk的操作

(1)打印

gawk最基本的操作是打印,可以使用print或printf命令进行打印。print命令会在输出内容的末尾自动添加换行符,而printf命令则需要手动添加。

例如,打印文件test.txt中的第2行:

gawk 'NR==2 { print }' test.txt

输出结果为:

hello world

(2)匹配

gawk最常用的操作之一是匹配,其逻辑与sed命令中的替换逻辑类似。gawk中的匹配使用正则表达式。

例如,匹配文件test.txt中所有包含“apple”的行,并打印出来:

gawk '/apple/ { print }' test.txt

输出结果为:

I like apple
The apple is green

(3)数学运算

gawk还可以进行数学运算,包括加、减、乘、除、取模等操作,可以使用加减乘除号进行操作。

例如,将文件test_num.txt中所有数字加1,并输出结果:

gawk '{ print $1+1 }' test_num.txt

输出结果为:

2
3
4

(4)分割

在gawk中,可以使用FS变量来指定分隔符,然后使用$1、$2、$3等参数来获取分割后的字段。

例如,将文件test.txt中的每行按空格分割,然后输出第1个和第2个字段:

gawk '{ FS=" "; print $1,$2 }' test.txt

输出结果为:

I like
The apple

(5)统计

gawk还可以进行统计操作,包括对行、字段、数字等进行统计。其中,NR变量表示当前行数,NF变量表示当前行字段数,$1、$2、$3等表示当前行的第1个、第2个、第3个字段等。

例如,统计文件test.txt中包含“apple”的行数:

gawk '/apple/ { count++ } END { print count }' test.txt

输出结果为:

1
  1. gawk的实例

(1)将文件中所有数字加1,并保存到新文件中

gawk '{ print $1+1 }' input.txt > output.txt

(2)将文件中包含“apple”的行替换为“orange”

gawk '/apple/ { gsub("apple", "orange", $0); print }' input.txt

(3)将文件按空格分割,然后将第1列的数字相加

gawk '{ sum+=$1 } END { print sum }' input.txt

(4)将文件中的第3列和第4列相加

gawk '{ sum=$3+$4; print sum }' input.txt

(5)统计文件中包含“apple”和“orange”的行数

gawk '/apple/ || /orange/ { count++ } END { print count }' input.txt

三、sed和gawk的对比

sed和gawk都是Linux中常用的文本处理工具,但它们在某些方面有所不同。

(1)sed专注于文本替换,而gawk专注于文本匹配和统计。

(2)sed命令更简单,适用于需要快速进行文本替换等操作

在Shell编程中,有两个强大的工具——sed和awk。它们都是Linux操作系统预安装的工具,可以用于处理文本文件和数据流。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华为奋斗者精神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值