Shell 实现文件基本操作(sed-编辑、awk-匹配、wc-统计)

本文详细介绍了Shell中的sed和awk命令,用于文本处理和数据分析。sed主要用于文本的增删查改,如行插入、替换、删除等操作;awk则是一个强大的文本分析工具,支持按空格分隔切片、正则查询、列打印等功能。通过实例演示了这两个命令的多种用法,包括匹配行插入内容、删除指定范围、替换匹配字符串等,展示了它们在日常数据处理中的实用性。
摘要由CSDN通过智能技术生成

使用Shell 自带的工具,实现对文本类文件的操作,满足日常数据处理的需求。

一、命令 sed -编辑工具

sed 是一款功能强大的非交互流式文本编辑器,可实现替换文件中的单词,一次处理一行内容,首先将该行内容放入缓存,在缓存中处理,完成后将缓存内容发送到终端。
基本语法sed [option] [set命令] filename

选项参数

sed -e 直接在指令模式进行sed编辑,当命令行多个sed才需要-e选项;
sed -i 直接对内容进行修改,不加该参数则只是预览;
sed -f 后跟保存了sed指令的文件;
sed -n 取消默认输出。

set 命令功能参数

a add新增,a的后面连接字符串;
c change 更改,更改匹配行的内容;
d delete 删除,删除匹配的内容;
i insert 插入,想匹配行前插入内容;
s substitute 替换,替换匹配到的内容;
n 读取下一行。

demo演示

1)指定行号前或后插入数据
原始文件如下所示。
在这里插入图片描述
行后插入,执行命令 sed -i ‘3a北京西城’ info.txt ,在第三行前添加北京西城,这里加i参数,是直接修改文件,执行结果如下所示。
在这里插入图片描述
行前插入,执行命令 sed -i ‘3i北京昌平’ info.txt ,在第三行前添加北京西城,执行结果如下所示。
在这里插入图片描述
2)指定内容前后插入内容
支持正则
行前插入,执行命令 sed ‘/北京/ihello’ info.txt ,在北京开头之前行插入 hello,执行结果如下所示。
在这里插入图片描述
3)最后一行后插入内容
行后插入,执行命令 sed ‘$alove java’ info.txt ,在最后一行插入love java,执行结果如下所示。
在这里插入图片描述
4)删除指定范围内容
删除用 d 命令功能,执行 sed ‘5,6d’ info.txt,即 删除5-6行,执行结果如下所示。
在这里插入图片描述
取反删除,执行 sed ‘1,3!d’ info.txt,即 保留1-3行,执行结果如下所示。
在这里插入图片描述
5)删除匹配行及其后面行
匹配行及其后内容,执行命令 sed ‘/张家口/,+1d’ info.txt,使用+1,执行结果如下图所示。
在这里插入图片描述
6)替换匹配行第一个指定的字符串
匹配行替换,执行命令 sed ‘s/北京/北京市/’ info.txt,使用 s,将北京替换成北京市,执行结果如下图所示。
在这里插入图片描述
全局替换,执行命令 sed ‘s/北京/北京市/g’ info.txt,使用 g 全局匹配。
替换第2个,执行命令 sed ‘s/北京/北京市/2’ info.txt,指定2,表示第2个。
替换第2个并写入文件,执行命令 sed -n ‘s/北京/北京市/2pw infodata.txt’ info.txt,使用 -n 获取匹配的,-p 打印出来,w 写入文件。
7)每行末尾拼接 text
匹配行替换,执行命令 sed ‘s/dollar/& test/’ info.txt,使用 s,将北京替换成北京市,执行结果如下图所示。
在这里插入图片描述
8)每行首位拼接 #
匹配行替换,执行命令 sed ‘s/^/&#/’ info.txt,使用 s,将北京替换成北京市,执行结果如下图所示。
在这里插入图片描述

注意:替换类的命令,需要 / 来结尾。

9)查询匹配的内容
匹配显示字符串,执行命令 sed -n ‘/北京/p’ info.txt,使用 -n 匹配到的,p打印显示,查找北京,执行结果如下图所示。
在这里插入图片描述
10)执行多个sed命令
方式一:用 -e 连接,命令 sed -e ‘1d’ -e ‘s/北京/北京市/g’ info.txt,多个sed 同时执行,效果如下所示。
在这里插入图片描述
方式一:用 ; 连接,命令 sed ‘1d;s/北京/北京市/g’ info.txt,多个sed 同时执行,效果如下所示。
在这里插入图片描述

二、命令 awk -分析工具

awk 强大的文本分析工具,把文件逐行读入,以空格默认分隔符将每行切片,切片部分进行各种分析处理。
基本语法 awk option ‘pattern{action}’ filename{}

选项参数

-F 指定输入文件拆分的分隔符;
-v 赋值一个用户定义变量。

内置函数

NF 浏览记录的域的个数,根据分隔符分割后的列数;
NR 行号,已读的行数;
$n $0变量值整条记录,$1 当前行第一个域

$NF number finally 表示最后一列信息。

demo演示

数据准备:复制文件 cp /etc/passwd ./
1)匹配打印数据
执行命令,echo “我 爱 中国 北京” | awk ‘{print $1"&“$2”&“$3”&"$4}’ ,空格分割抽取数据,按占位符拼接匹配,执行效果如下图所示。
在这里插入图片描述
2)正则查询
执行命令,ls -a | awk ‘/^c/’ ,打印 c 开头的文件,执行效果如下图所示。
在这里插入图片描述
3)按列打印
打印第一列,执行命令,awk -F: ‘{print $1}’ passwd,即 $1,执行效果如下图所示。
在这里插入图片描述
打印倒数第一列,执行命令,awk -F: ‘{print $NF}’ passwd,即 NF,执行效果如下图所示。
在这里插入图片描述
打印倒数第二列,执行命令,awk -F: ‘{print $(NF-1)}’ passwd,即 NF-1,执行效果如下图所示。
在这里插入图片描述
4)打印指定行
打印第10-18行,执行命令,awk -F: ‘{if(NR>=10 && NR<=18){print $1}}’ passwd,执行效果如下图所示。
在这里插入图片描述
5)添加开始和结束信息
开始结束添加说明文字,执行命令,echo -e “henu\nzknu” | awk ‘BEGIN{print “welcome…”}{print $0}END{print "end… "}’,执行效果如下图所示。
在这里插入图片描述
6)循环遍历输出打印
循环,执行命令,echo “北京 上海 深圳 驻马店 " | awk -v str=”" ‘{for(n=1;n<=NF;n++){ str=str dollar n}} END {print str}’,执行效果如下图所示。
在这里插入图片描述
7)添加空行并显示行号
添加空行,执行命令,sed ‘G’ info.txt,隔行插入空行,执行效果如下图所示。
在这里插入图片描述
显示空行的行号,执行命令,awk ‘/^dollar/{print}’,NR表示行号,执行效果如下图所示。
在这里插入图片描述

三、命令 wc

wc 是统计文件行数、字节和单词数的命令。
基本语法wc [option] filename

选项参数

-c 显示文件的字节数byte;
-l 显示文件的行数;
-m 显示文件的字符数;
-w 显示文件有包含的单词数。

demo演示

1)获取文件行号
原始文件如下所示。
在这里插入图片描述
执行命令 cat info.txt | wc -l,查询文件的行号,这里可以看到 行数为 7,但实际上是8。
在这里插入图片描述
在文件末尾添加一行后,再次执行命令 cat info.txt | wc -l,这里可以看到 行数为 8。
在这里插入图片描述

注意
wc -l 以 ‘\n’ 作为行结束的标志,若缺少的话,显示会比实际少一行。
// 查询行数,判断每行是否存在空串
grep -c “” info.tx

文本操作 总结如下:

文本操作四剑客( grep sed awk cut)
grep 用于查找匹配的行;
cut 截取数据,按列分隔符提取按个计算,不适合截取文件中存在多个空白符;
sed 增删查改,用于文本中按行截取;
awk 截取分析数据,在某个文件中以竖列截取分析数据,若存在多个空格也支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值