Linux命令之sed
文章目录
- 1.什么是sed?
- 2.常用命令
- 3.以行为单位的新增/删除
- 4.以行为单位的取代与显示
- 5.数据搜寻与取代
- 6.多点编辑
- 7.直接修改文件(危险行为)
1.什么是sed?
-
官方解释:
‘sed’ is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ‘ed’), ‘sed’ works by making only one pass over the input(s), and is consequently more efficient. But it is ‘sed’'s ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
-
sed是一个流编辑器。流编辑器用于对输入流(来自管道的文件或输入)执行基本的文本转换。虽然在某些方面类似于允许脚本编辑的编辑器(例如’ed’),但sed只通过一次传递输入来工作,因此效率更高。与其他类型的编辑器相比,sed在管道中过滤文本的能力尤为突出。
-
sed是一个批处理非交互式编辑器,可以对来自文件或者标准输入的输入流进行转换。sed一次处理一行文本并把处理结果输出到标准输出设备。sed把当前处理的行内容存储在pattern区。当sed完成对模式空间中行的处理后,模式空间中的行被送往标准输出,行被处理完成后,就被移出模式空间,程序接着读入下一行处理、显示、移出…直到文件最后一行处理完成。
2.常用命令
# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。
但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :用于多点编辑,每个-e 选项后都可以接一个动作;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
动作说明: [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,g含义是全局替换
3.以行为单位的新增/删除
- 新建一个测试文本 1.txt,内容如下
这是一个测试文档,
主用来学习sed语法,
让我们现在开始!
hello
world
this is a new hello world!
- 示例代码:
# 删除1.txt中的2-5行
sed '2,5d' 1.txt
# 删除1.txt中的第2行
sed '2d' 1.txt
#删除1.txt中的2-最后一行
sed '2,$d' 1.txt
# 在第二行的下方添加内容为“drink tea”的一行
sed '2a drink tea' 1.txt
# 在第二行的上方添加内容为“drink tea”的一行
sed '2i drink tea' 1.txt
# 在第二行的下方添加多行内容,\后接回车键换行
sed '2a drink tea or .....\
drink beer?' 1.txt
4.以行为单位的取代与显示
- 示例代码:
# 将2-5行替换为"No 2-5 number"
sed '2,5c No 2-5 number' 1.txt
# 列出5-7行的内容,不加-n会重复显示5-7的内容
sed -n '5,7p' 1.txt
5.数据搜寻与取代
- 示例代码:
# sed 's/要被取代的字串/新的字串/g’
sed 's/hello/world/g' 1.txt
# 获取机器的IP地址
/sbin/ifconfig | grep 'inet 10' | sed 's/^.*inet //g' | sed 's/ *netmask.*$//g'
输出 10.223.17.4 地址
6.多点编辑
- 示例代码
# 删除4到末尾的内容,并将剩余内容中的sed 替换为 this sed
cat 1.txt | sed -e '4,$d' -e 's/sed/this sed/'
7.直接修改文件(危险行为)
- sed -i 可以对文件内容进行直接修改,不输出到终端(默认是输出到终端)
# 在1.txt文件末尾加一行“This is a test file” 内容
sed -i '$a # This is a test file' 1.txt