shell编程--awk 、sed 命令介绍
一、sed命令
sed 主要是用来将数据进行选取、替换、删除、新増的命令。我们看看命令的语法:
[root@localhost ~] # sed [选项] '[动作]' 文件名
选项
-n:一般 sed 命令会把所有数据都输出到屏幕上。如果加入此选项,则只会把经过 sed 命令处理的行输出到屏幕上;
-e: 允许对输入数据应用多条 sed 命令编辑;
-f 脚本文件名:从 sed 脚本中读入 sed 操作。和 awk 命令的 -f 选项非常类似;
-r:在 sed 中支持扩展正则表达式;
-i:用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出动作;
a \:追加,在当前行后添加一行或多行。当添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结;
c \:行替换,用c后面的字符串替换原数据行。当替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结;
i \:插入,在当前行前插入一行或多行。当插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结;
d:删除,删除指定的行;
p:打印,输出指定的行;
s:字符串替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字串/新字串/g”(和Vim中的替换格式类似);
list.txt文件为
![](https://img2020.cnblogs.com/blog/1468919/202006/1468919-20200629162642925-795681230.png)
sed 所做的修改并不会直接改变文件的内容(如果是用管道符接收的命令的输出,则连文件都没有),而是把修改结果只显示到屏幕上,除非使用"-i"选项才会直接修改文件。
1、sed -n '2p' list.txt 输出指定行,这里是输出list.txt文件第二行
如果不加 -n 指令,会把文件的内容都输出一遍,指定行重复输出
2、sed '2,4d' list.txt 删除指定行,这里是删除【2,4】行,输出删除后的结果,但是并不会马上改动文件,
只有加上 -i才会修改文件内容 sed -i '2,4d' list.txt
3、sed '2a hello' list.txt 在指定行 后 面插入内容
4、sed '2i hello' list.txt 在指定行前面增加内容
![](https://img2020.cnblogs.com/blog/1468919/202006/1468919-20200629163855883-1943652563.png)
5、sed 's/111/----/' list.txt 将list.txt文件的111都替换成----
![](https://img2020.cnblogs.com/blog/1468919/202006/1468919-20200629170205128-766902760.png)
sed '1s/111/----/g' list.txt 将指定行的某个内容替换
![](https://img2020.cnblogs.com/blog/1468919/202006/1468919-20200629171351275-503275550.png)
6、sed '1s/^/#/g' list.txt 注释掉指定行,^代表行首
![](https://img2020.cnblogs.com/blog/1468919/202006/1468919-20200629171544738-1260490927.png)
二、awk命令
awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息
awk '条件1 {执行语句 1} 条件 2 {执行语句 2} …' 文件名
在awk编程中,因为命令语句非常长,所以在输入格式时需要注意以下内容:
- 多个条件{动作}可以用空格分隔,也可以用回车分隔。
- 在一个动作中,如果需要执行多条命令,则需要用分隔,或用回车分隔。
- 在awk中,变量的赋值与调用都不需要加入"$"符号。
list.txt文件
1、awk '{printf $1 "\t" $2 "\n"}' list.txt 输出list文件第1列和第2列的内容 列之间用空格区分
2、awk 'BEGIN{printf "This is a transcript\n"} {printf $1 "\t" $3"\n"}' list.txt 在执行命令之前输出提示语句
3、 awk 'END{printf "The Printf was End\n"} {printf $1 "\t" $3"\n"}' list.txt 在命令执行完毕之后输出提示
4、awk '/666/' list.txt 打印包含666 的行
5、awk '{if($2>333)print $3}' list.txt 输出第二列>=333对应行的第三列
也可以剔除一些特殊的行在进行条件筛选
awk有很多内建的功能,比如数组、函数等,后面带补充
参考博客https://www.cnblogs.com/lizhouwei/p/10029505.html
相关文章
- shell编程----grep命令和正则表达式
- python套接字编程实现ntp服务和远程命令执行
- 【LINUX 学习】使用find和xargs[转摘自《shell编程和unix命令》]
- 泛函编程(30)-泛函IO:Free Monad-Monad生产线
- Linux Shell脚本自动化编程实战- shell并发
- 【C编程基础】C编译链接命令gcc
- Linux Shell脚本自动化编程实战-shell变量(二)
- Linux Shell脚本自动化编程实战-shell变量(一)
- 【PyQT5编程】Pycharm结合QtDesigner使用示例:创建登录窗体
- java juc包多线程编程案例:Executor入门示例
- 【[Offer收割]编程练习赛9 D】 矩阵填数
- Qt网络编程的命令模式:把网络命令封装成类
- Java并发编程实战读书笔记(1)
- Python编程:使用sys、argparse、click、fire实现命令行参数解析
- 【并行编程】系统体系结构和组件具体说明
- 21.第六章 Shell脚本编程基础入门-- shell 脚本语言的基本用法(四)
- 19.第六章 Shell脚本编程基础入门 -- shell 脚本语言的基本用法(二)
- LabVIEW编程LabVIEW控制NI cRIO-9066例程与相关资料
- Java开发之高并发编程篇(八)——安全访问的集合(1)
- 菜鸟攻略–C语言多文件编程初探(二):使用 gcc 手动编译多文件 C 程序
- 【GPU】Nvidia CUDA 编程高级教程——支持点对点访问的多 GPU
- kitten编程猫 在线课程第八讲要点 - 变量的使用
- shell - 08 - Shell文本处理三剑客 - sed -编辑命令详解
- C++、STL标准模板库和泛型编程 ——关联式容器 (侯捷)