栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

使用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 “henunzknu” | 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表示行号,执行效果如下图所示。

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996363.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号