sed 通常用于过滤文本,即它接受文本输入,对其执行一些操作(或一组操作),然后输出修改后的文本。sed 通常用于使用模式匹配或替换文件中多次出现的字符串来提取文件的一部分。
Linux sed 命令是利用脚本来处理文本文件。 sed 可依照脚本的指令来处理、编辑文本文件。 Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
使用场景我就讲讲我本来的使用场景,我使用最多的场景就是编写shell脚本时会用到。使用sed可以自动化的编辑一些文本文件。
官方帮助文档https://www.gnu.org/software/sed/manual/sed.html
语法sed [-hnV][-e][-f][文本文件]
参数说明:
-e
或--expression=
以选项中指定的script来处理输入的文本文件。-f
或--file=
以选项中指定的script文件来处理输入的文本文件。- -h或–help 显示帮助。
- -n或–quiet或–silent 仅显示script处理后的结果。
- -V或–version 显示版本信息。
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
一般情况下,将 /etc/apt/sources.list
文件中 Ubuntu 默认的源地址 http://archive.ubuntu.com/
替换为 http://mirrors.ustc.edu.cn/
即可。 如果手动编辑,要输入很多指令,还会出错操作失误。
使用sed一行命令就可以实现了。
sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
这样就非常的方便。
删除文件中的第 4 行sed '4d' input.txt > output.txt
在第 10-20 行将所有出现的 ‘hello’ 替换为 ‘world’
sed '10,20s/hello/world/' input.txt > output.txt
仅打印输入文件的第 45 行
sed -n '45p' file.txt
多个文件拼在一起输出1到20行
sed -n '1,20p' one.txt two.txt three.txt
输入指定字符结尾的行
sed -n '/bash$/p' /etc/passwd
Id
删了指定字符结尾的行
input.txt内容如下;
boy
dog
girl
phone
age
sed '/dog$/Id' input.txt
删除命令: Id
i
指定位置插入文本
input.txt内容如下;
a
b
c
要在b上面一行加个java
sed '/b/ijava' input.txt
a java b c 基中i为插入指令java是插入的值
c
将第 2 到第 9 行替换为单词 ‘hello’
seq 10 | sed '2,9c hello'
1
hello
10
命令c
替换文本
处理段落等文本块(而不是逐行)的常用技术是使用以下构造:
sed '/./{H;$!d} ; x ; s/REGEXP/REPLACEMENT/'
第一个表达式/./{H;$!d}对所有非空行进行操作,并将当前行(在模式空间中)添加到保持空间。在除最后一行之外的所有行上,模式空间都被删除并重新开始循环。 其他表达式x和s仅在空行(即段落分隔符)上执行。该x命令将累积的行从保持空间取回模式空间。然后该 s///命令对段落中的所有文本(包括嵌入的换行符)进行操作。 示例:
$ cat input.txt
a a a aa aaa
aaaa aaaa aa
aaaa aaa aaa
bbbb bbb bbb
bb bb bbb bb
bbbbbbbb bbb
ccc ccc cccc
cccc ccccc c
cc cc cc cc
$ sed '/./{H;$!d} ; x ; s/^/\nSTART-->/ ; s/$/\n
a a a aa aaa
aaaa aaaa aa
aaaa aaa aaa
bbbb bbb bbb
bb bb bbb bb
bbbbbbbb bbb
ccc ccc cccc
cccc ccccc c
cc cc cc cc
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?