shell学习记录----初识sed和gawk

本文深入解析sed和gawk两个强大的Linux文本处理工具。sed部分覆盖了基本命令格式、常用命令如替换、删除、插入、修改及转换,以及如何处理文件。gawk部分介绍了其作为编程语言的功能,包括变量定义、数据处理、结构化编程概念,以及如何使用多个命令和在数据处理前后运行脚本。

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

Linux命令行与shell脚本编程大全中关于sed和gawk的介绍合在一起,而且结构有点乱。

不像之前的命令写的很清楚。所以这次我需要写下来整理一下。

一、sed部分

1.1 sed命令格式如下:

sed option script file

  • -e script:在处理输入时,将script中指定的命令添加到已有的命令中
  • -f file:在处理输入时,将file中指定的命令添加到已有的命令中
  • -n: 不产生命令输出,使用print命令来完成输出
  • -e: 执行多个命令

 

1.2 script里面又有一些命令:

s/pattern/replacement/flags 替换命令,flags包括:数字(行号),g(替换所有),p(打印原先内容),w file(写进文件)

例子:

sed 's/test/trial/' data4.txt
sed 's/test/trial/2' data4.txt
sed 's/test/trial/g' data4.txt
sed -n 's/test/trial/p' data4.txt
sed 's/test/trial/w test.txt' data5.txt

 

然后,s指令,又可以指定地址,格式如下:

[address]command 或者

address {

  command1

  command2

  command3

}

或者直接用/pattern/command,匹配出需要的部分,再操作。

使用例子:

sed '2s/dog/cat/' data1.txt
sed '2,3s/dog/cat/' data1.txt
sed '2,$s/dog/cat/' data1.txt
sed '/Samantha/s/bash/csh/' /etc/passwd

sed '2{
s/fox/elephant/
s/dog/cat/
}' data1.txt

sed '3,${
s/brown/green/
s/lazy/active/
}' data1.txt
script--s

 

1.3 删除行命令

和s类似,直接例子吧

sed '3d' data6.txt
sed '2,3d' data6.txt
sed '3,$d' test6.txt
sed '/number 1/d' data6.txt
删除行,请小心使用

 

1.4 插入和附加文本

插入命令(i),在指定行前加一个新行

附加命令(a),在指定行后加一个新行

sed '[address] command\ new line'

例子:

echo "Test Line 2" | sed 'i\ Test Line 1'
echo "Test Line 2" | sed 'a\Test Line 1'
插入i,a命令,注意是\

 

1.5 修改行

命令c类似于插入和附加,直接上例子吧

sed '3c\This is a changed line of text.' data6.txt
sed '/number 3/c\This is a changed line of text.' data6.txt
修改行

 

1.6 转换命令

转换命令(y)是唯一可以处理单个字符的sed编辑器命令

[address]y/inchars/outchars/

例子:

sed 'y/123/789/' data8.txt   data8中所有123换成789,一一对应
y命令

 

1.7 回顾打印

  • p命令打印文本
  • 等号(=)打印行号
  • l(小写L)列出行

例子:

echo "this is a test" | sed 'p'

sed -n '/number 3/p' data6.txt
sed -n '2,3p' data6.txt

sed -n '/3/{
p
s/line/test/p
}' data6.txt

sed '=' data1.txt

sed -n '/number 4/{
=
p
}' data6.txt

sed -n 'l' data9.txt
打印例子

 

1.8 sed处理文件

写入文件用命令(w),[address]w filename

读取数据用命令(r),[address]r filename

例子:

sed -n '/Browncoat/w Browncoats.txt' data11.txt

sed '3r data12.txt' data6.txt
sed '/number 2/r data12.txt' data6.txt
sed '$r data12.txt' data6.txt
写入和读取的例子

 

二、gawk部分

gawk提供了一种编程语言,可以做下面的事情:

定义变量来保存数据: 

  • 定义变量来保存数据;
  • 使用算术和字符串操作符来处理数据;
  • 使用结构化编程概念(比如if-then语句和循环)来为数据处理增加处理逻辑
  • 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告。

2.1 gawk命令格式:

gawk options program file

可用选项:

-F fs  指定行中划分数据字段的字段分隔符

-f file  从指定的文件中读取程序

-v var=value  定义gawk程序中的一个变量及其默认值

-mf N  指定要处理的数据文件中的最大字段数

-mr N  指定数据文件中的最大数据行数

-W keyword  指定gawk的兼容模式或警告等级

 

gawk会从STDIN接收数据,并处理然后打印到STDOUT。

2.2 gawk数据字段变量

  • $0代表整个文本行
  • $1文本行中第一个数据字段
  • $2文本行中第二个数据字段
  • $n文本行中第n个数据字段

2.3 使用多个命令

只要在命令之间放个分号即可,组成多命令。

echo "My name is Rich" | gawk '{$4="Christine"; print $0}'

 

2.4 在处理数据前后运行脚本

关键字:BEGIN、END

gawk 'BEGIN {print "The data3 File Contents:"}
{print $0}
END {print "End of File"}' data3.txt

 

转载于:https://www.cnblogs.com/ch122633/p/10164750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值