linux sed指令详解
时间:2022-07-23
本文章向大家介绍linux sed指令详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
声明
引用自鸟哥私房菜。
sed指令是对行来进行处理,结合正则表达式在文件内容处理方面可以发挥强大的作用。
参数详解
[root@linux ~]# sed [-nefr] [动作]
参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN
的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过
sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在指令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的
sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function 有底下这些:
a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s :取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!
参数d,以行为单位,删除功能
删除2~5行,中,2,5,行包括在内
[root@localhost ~]# nl /etc/passwd | sed '2,5d'
上面的指令完整的写法是要加参数e的,但是由于只需要执行一条指令,所以可以省略,但是如果是有多条指令,每条指令都需要加上-e参数(下面的指令都省略了-e参数)
[root@localhost ~]# nl /etc/passwd | sed -e '2,5d'
[root@localhost ~]# nl /etc/passwd | sed -e '2,5d' -e '8,10d'
删除第2行
[root@localhost ~]# nl /etc/passwd | sed '2d'
删除3到最后一行
[root@localhost ~]# nl /etc/passwd | sed '3,$d'
注意:sed后面接动作,务必用单引号括住
参数a i 新增内容
在第二行后新增内容
[root@localhost ~]# nl /etc/passwd | sed '2a drink tea'
在第二行前,新增内容
[root@localhost ~]# nl /etc/passwd | sed '2i drink tea'
新增多行内容,主要要是用到或者回车(新增的内容使用单引号,如果要想使用回车来实现新增多行,注意另外一个单引号别写出来,否则就直接执行指令了)来新增多行内容
[root@localhost ~]# nl /etc/passwd | sed '2a drink tea ....
drink bear?'
以行为单位替换c和显示p
替换2到5行
[root@localhost ~]# nl /etc/passwd | sed '2,5c 2-5 no data'
显示10~20行
[root@localhost ~]# nl /etc/passwd | head -n 20 | tail -n 10
也可以使用
[root@localhost ~]# nl /etc/passwd | sed -n '11,20p'
记得要加上-n变成silent模式,只输出经过sed特殊处理的。否则会有重复输出。
参数s 查找和替换
sed ‘s/要被替换的字符串/新的字符串/g’
[root@localhost ~]# /sbin/ifconfig ens160
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 912.168.1.1 netmask 255.255.255.0 broadcast 912.168.1.255
[root@localhost ~]# /sbin/ifconfig ens160 | grep 'inet '
inet 912.168.1.1 netmask 255.255.255.0 broadcast 912.168.1..255
[root@localhost ~]# /sbin/ifconfig ens160 | grep 'inet ' | sed 's/^.*addr//g'
inet 912.168.1.1 netmask 255.255.255.0 broadcast 912.168.1.255
将ip前面的部分删除
[root@localhost ~]# /sbin/ifconfig ens160 | grep 'inet ' | sed 's/^.*inet//g'
912.168.1.1 netmask 255.255.255.0 broadcast 912.168.1.255
删除ip后面的
[root@localhost ~]# /sbin/ifconfig ens160 | grep 'inet ' | sed 's/^.*inet//g' | sed 's/netmask.*$//g'
去除注释行
[root@localhost ~]# cat /etc/man_db.conf | grep 'MAN' | sed 's/#.*$//g'
注释行变成了空格,将空格删除
[root@localhost ~]# cat /etc/man_db.conf | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d'
使用sed直接修改文件
将所有.修改成!
[root@localhost tmp]# sed -i 's/./!/g' regular_express.txt
在最末尾添加# this is a test一行注释。
[root@localhost tmp]# sed -i '$a # this is a test' regular_express.txt
- 51Nod 1004 n^n的末位数字(日常复习快速幂,莫名的有毒,卡mod值)
- kmp模版
- 触发器在渗透中的利用
- Codeforces 626B Cards(模拟+规律)
- Android 5.0屏幕录制漏洞(CVE-2015-3878)威胁预警
- Codeforces 626A Robot Sequence(模拟)
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
- [接口测试 - 基础篇] 01 你应该了解的协议基础
- Uva - 12050 Palindrome Numbers【数论】
- [接口测试 - http.client篇] 14 源码初探及其工作机制分析
- 51Nod 1277 字符串中的最大值(KMP,裸题)
- Codeforces Round #345 (Div. 2)【A.模拟,B,暴力,C,STL,容斥原理】
- 07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件
- BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 制作的 dotnet tool 运行失败提示依赖缺失
- 撸了个多线程断点续传下载器,我从中学习到了这些知识
- 使用 IOC 控制反转和 DI 依赖注入的意义
- Servlet配置初始值,并获取初始值
- CSS 技巧一则 -- 不定宽溢出文本适配滚动
- 潘石屹用Python解决100个问题 | 最大公约数
- 我的天上传文件又出现问题了(超出大小限制)
- 现在学 PHP 没有发展?来看看这个后台框架你还会这么想吗
- leetcode-easy-array-最大子序和
- Leecode No.3 无重复字符的最长子串
- Solidity 0.6.11 更新
- 潘石屹用Python解决100个问题 | 最小公倍数
- 通过CREATE2获得合约地址:解决交易所充值账号问题
- 小知识:如何判定crontab任务的执行频度
- 以太坊合约静态分析工具Slither简介与使用