了解sed的大致作用
- 可以查找过滤除指定的信息
- 擅长编辑文件内容,对文件进行操作
简单了解sed执行原理
-
sed命令执行过程核心原则:找什么信息、做什么事情
-
找什么信息 == 定义查询的条件
-
做什么事情 == 操作执行命令
-
执行原理过程:
- 命令语法结构:# sed [参数] ‘条件 指令’ 文件信息
如何定义条件:根据行号,根据内容 与 正则信息
如何定义指令:满足前面条件的信息处理的指令(比如添加,删除)
sed常用指令
-
查询操作
模板
-
按照行号匹配
1. 行号信息匹配:#sed '3p' test.txt
- - - 3代表第三行,p(print代表显示第三行信息
这里显示已经取到第三行信息,因为默认输出的原因其他内容也会显示出来,
加个参数就好了,加 -n 默认只显示匹配到的内容,看一下效果吧
2. 多行信息匹配:#sed -n '2,4p' test.txt
- - - 表示2到第四行内容都显示
3. 多行信息匹配(不连续行):#
sed -n '3p;4p' test.txt
- - - 表示第三行和第四行内容都显示
- 按照字符信息匹配
1. 单行匹配信息:#sed -n '/456/p' test.txt
- - - 表示匹配文件中有 456字符信息的行 显示出来
2. 多行匹配信息:#sed -n '/456/,/abc/p' test.txt
- - - 表示匹配文件中带有 456到abc 的行,之间的行也显示出来
3. 多行匹配信息(不连续行):#sed -n '/456/p;/abc/p' test.txt
- - -表示匹配文件中有456字符的行和有adc字符的行
-
-
删除操作
-
按照行进行删除操作
1. 单行删除操作:#sed -i '3d' test.txt
- - - 删除指定第6行 - - - 参数: -i 是对文件做真实修改,没有加 -i 都是在模式空间做操作,并没有真的对文件做修改。
2. 多行删除操作:#sed -i '1,3d' test.txt
- - - 删除第一行 到 第三行所有内容
3. 多行删除操作:#sed -i '1d;3d' test.txt
- - - 删除第一行 与 第三行内容
-
根据字符进行删除操作
1. 按照字符删除行操作:#sed -i '/abc/d' test.txt
- - - 匹配到有 adc 字符串的行并且删除
2. 按照字符删除多行操作:#sed -i '/123/,/abc/d' test.txt
- - - 匹配到有123 到 abc 字符的行,都进行删除
2.1 如果文件内容下面有和 “123” 一样的内容会怎么样?(这里在源模板上多添加一些信息)
解:看到,要是有一样的开头条件(123),后面在出现一样的字符内容,也会跟着匹配,直到匹配到有结束条件(abc)的字符
2.2 如果文件内容有和 “abc” 一样的内容又会怎么样呢?
解:实验中可以看文件内容中有 结束条件(abc)的,是不会匹配的
2.3 如果文件内容有和 “123” “abc” 同样字符的内容而又怎么样呢?
解:图片中可以看到,要是有同样的匹配条件,就都会匹配出来3. 按照字符删除多行操作(不连续删除):#
sed -i '/123/d;/abc/d' test.txt
-
-
增加操作
- 根据行号添加操作
1. 指定行添加信息:#sed '1atest' test.txt
- - - 表示在第一行下面添加 test 的字符 。a:表示在指定行下面一行添加, i:表示在指定行上面添加信息
下面有些操作加 -n 不太好看的到效果,所有有些操作就不加了
2. 指定多行添加操作:#sed '1,3atest' test.txt
- - - 表示在第一行到第三行下面都添加test 字符,
3. 指定多行添加操作:#sed -e '1itest' -e '2atest1' test.txt
- - - 表示在第一行上面添加text 字符,在第二行下面添加 test1 字符内容。
4. 指定行添加多个信息:#sed '1atest\ntest222' test.txt
- - - 表示在第一行下面添加两个信息,使用\n分隔符,就可以换行
- 根据行号添加操作
-
修改操作
- 指定行修改操作
1. 单行内容修改信息:#sed '1s#4#test#g' test.txt
- - - 将第一行中的4 替换成test
2. 多行内容修改信息:#sed '3,4s#a#xxx#g' test.txt
- - - 将3行和4行相同内容a 替换成xxx
- 指定行修改操作
禁止参数一起使用
sed -ni '/123/d' test.txt
- - - 真实修改文件内容,不显示默认输出,删除带有123的字符,可是现实不是这样的,而是
它将所有东西都删除了,😐😢 ,所以禁止 参数 n 于 i 一起使用,最好在使用 i 真实修改文件内容时,给文件备份,也有快捷的方法:sed i.bak '/123/d' test.txt
- - -这样就会备份一个文件修改前的备份,即便修改后能通过此文件恢复,看一下效果