当前位置:网站首页>Shell 实现文件基本操作(sed-编辑、awk-匹配)
Shell 实现文件基本操作(sed-编辑、awk-匹配)
2022-07-02 23:31:00 【梦幻通灵】
使用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表示行号,执行效果如下图所示。
文本操作四剑客( grep sed awk cut)
grep 用于查找匹配的行;
cut 截取数据,按列分隔符提取按个计算,不适合截取文件中存在多个空白符;
sed 增删查改,用于文本中按行截取;
awk 截取分析数据,在某个文件中以竖列截取分析数据,若存在多个空格也支持。
边栏推荐
- 英文论文有具体的格式吗?
- Pageoffice - bug modification journey
- Multiprocess programming (I): basic concepts
- Multiprocess programming (II): Pipeline
- form表单实例化
- JSON conversion tool class
- Form form instantiation
- UART、RS232、RS485、I2C和SPI的介绍
- sysdig分析容器系统调用
- Explain in detail the significance of the contour topology matrix obtained by using the contour detection function findcontours() of OpenCV, and how to draw the contour topology map with the contour t
猜你喜欢
Multiprocess programming (I): basic concepts
MySQL advanced learning notes (III)
Maya fishing house modeling
Explain in detail the significance of the contour topology matrix obtained by using the contour detection function findcontours() of OpenCV, and how to draw the contour topology map with the contour t
Monitor container runtime tool Falco
Chinatelecom has maintained a strong momentum in the mobile phone user market, but China Mobile has opened a new track
写论文可以去哪些网站搜索参考文献?
可下载《2022年中国数字化办公市场研究报告》详解1768亿元市场
TypeError: Cannot read properties of undefined (reading ***)
秒杀系统设计
随机推荐
大学生课堂作业2000~3000字的小论文,标准格式是什么?
毕业总结
NC50965 Largest Rectangle in a Histogram
Solution to the problem of abnormal display of PDF exported Chinese documents of confluence
Architecture: load balancing
CMake基本使用
论文的英文文献在哪找(除了知网)?
NC24840 [USACO 2009 Mar S]Look Up
Bigder:32/100 测试发现的bug开发认为不是bug怎么处理
请问大家在什么网站上能查到英文文献?
Xcode real machine debugging
Why is the website slow to open?
SQL query statement parameters are written successfully
Pat 1030 travel plan (30 points) (unfinished)
Is there a specific format for English papers?
Free we media essential tools sharing
Nc20806 District interval
DotNet圈里一个优秀的ORM——FreeSql
[golang syntax] map common errors golang panic: assignment to entry in nil map
【单片机项目实训】八路抢答器