linux文本处理三剑客之sed命令

linux文本处理三剑客之sed命令

  • 1. sed是什么
  • 2. sed命令选项
  • 3. 标记替换
    • 3.1 单句替换
    • 3.2 对于整个文件进行替换
    • 3.3 指定行替换
    • 3.4 同时进行多个替换
    • 3.5 使用文件中指定命令替换另一文件
    • 3.6 当每句中含有多个要替换的关键字时
  • 4. 参数p和-n:显示
  • 5. 参数w:写入文件
  • 6. 要替换部分中含有/符号时的解决
    • 6.1 方法1:用\转义符号进行转义
    • 6.2 方法2:将修改格式中的/改为!
    • 6.3 方法3:将修改格式中的/改为#
  • 7. 参数d:删除
  • 8. 参数i和a:插入和追加
  • 9. 参数c:修改
    • 9.1 修改指定行
    • 9.2 修改含有指定信息的行
    • 9.3 修改多行
    • 9.4 修改指定单个字符
  • 10. 打印匹配到的内容
  • 11. 显示行号:'='
  • 12. 参数r:组合两个文件
    • 12.1 添加到指定行后
    • 12.2 添加到包含指定信息行的后面

1. sed是什么

sed :stream editor 行编辑器
vim :交互式编辑器

sed是一种在线编辑器,它一次处理一行内容处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed编辑命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

sed的优点:sed速度快,在启动vim的时间,sed已经完成了需要执行的操作

2. sed命令选项

linux文本处理三剑客之sed命令_第1张图片

3. 标记替换

3.1 单句替换

s/要替换的部分/替换成的部分

echo "This is a test" | sed 's/test/testing/'

在这里插入图片描述

3.2 对于整个文件进行替换

sed 's/dog/cat/' data1

linux文本处理三剑客之sed命令_第2张图片

3.3 指定行替换

sed '2s/dog/cat/' data1			    #指定替换第二行
sed '2,3s/dog/cat/' data1			#指定替换第2和第3行
sed '2,$s/dog/cat/' data1			#指定替换第二行到最后
[root@node2 sed]# sed '2{			#多个要求替换第二行
> s/fox/elephant/
> s/dog/cat/
> }' data1

linux文本处理三剑客之sed命令_第3张图片
linux文本处理三剑客之sed命令_第4张图片

3.4 同时进行多个替换

写法1:

sed -e 's/dog/cat/;s/brown/green/' data1

linux文本处理三剑客之sed命令_第5张图片
写法2:

[root@server1 sed]# sed -e '
> s/brown/red/
> s/dog/cat/
> s/fox/elephant/' data1

linux文本处理三剑客之sed命令_第6张图片

3.5 使用文件中指定命令替换另一文件

-f 命令文件 要替换的文件

sed -f script data1

linux文本处理三剑客之sed命令_第7张图片

3.6 当每句中含有多个要替换的关键字时

不加任何参数时默认替换每句中出现第一次的关键字:

sed 's/test/trial/' data2

linux文本处理三剑客之sed命令_第8张图片

加上g参数时替换所有出现的关键字:

sed 's/test/trial/g' data2

在这里插入图片描述
加具体的num参数,替换每句中出现第n次的关键字:

sed 's/test/trial/2' data2

在这里插入图片描述

4. 参数p和-n:显示

p显示指定句,通常和-n搭配使用;-n:默认不显示所有内容

sed -n 's/test/trial/p' data3		#只显示修改部分
sed -n 's/number/num/' data3		#使用-n而不使用p参数时,不会有显示
sed -n '/number3/p' data3			#显示匹配到的含有number3的行
sed -n '2,4p' data3					#显示2到4行

linux文本处理三剑客之sed命令_第9张图片

5. 参数w:写入文件

将指定部分写入文件

sed 's/test/trial/w test' data3 	#将修改的句子写入test文件
sed '1,2w test' test4		    	#将1到2行写入test文件

linux文本处理三剑客之sed命令_第10张图片

6. 要替换部分中含有/符号时的解决

6.1 方法1:用\转义符号进行转义

sed 's/\bin\/bash/\bin\/csh/' passwd

linux文本处理三剑客之sed命令_第11张图片

6.2 方法2:将修改格式中的/改为!

sed 's!bin/bash!bin/csh!' passwd

linux文本处理三剑客之sed命令_第12张图片

6.3 方法3:将修改格式中的/改为#

sed 's#bin/bash#bin/csh#' passwd

linux文本处理三剑客之sed命令_第13张图片

7. 参数d:删除

sed 'd' data4				#删除全部,原文本不会被改变
sed '3d' data4				#删除第三行
sed '2,3d' data4			#删除第2到3行
sed '3,$d' data4			#删除第三行到结束的行

linux文本处理三剑客之sed命令_第14张图片
linux文本处理三剑客之sed命令_第15张图片

应用正则表达式:
linux文本处理三剑客之sed命令_第16张图片

8. 参数i和a:插入和追加

echo 'Test Line 2' | sed 'i\Test Line 1'	#i表示插入到前面
echo 'Test Line 2' | sed 'a\Test Line 1'	#a表示追加到末尾

linux文本处理三剑客之sed命令_第17张图片

sed '3i\This is an inserted line' data4			#插入到第三行前面
sed '3a\This is an inserted line' data4			#追加到第三行后面

linux文本处理三剑客之sed命令_第18张图片

插入多条:

[root@node2 sed]# sed '1i \
> This is one line of new test.\
> This is another line of new test.\
> new line3.' test4

linux文本处理三剑客之sed命令_第19张图片

追加多条:

sed '$a\This is an inserted line.\nThis is another inserted line.' data4

linux文本处理三剑客之sed命令_第20张图片

9. 参数c:修改

9.1 修改指定行

sed '3c\This is a changed line of text.' data4

linux文本处理三剑客之sed命令_第21张图片

9.2 修改含有指定信息的行

sed '/number 1/c\This is a changed line of text.' data4

linux文本处理三剑客之sed命令_第22张图片

9.3 修改多行

sed '2,3c\This is a changed line of text.' data4

注意:此处的修改多行为同时修改,而不是逐行修改
linux文本处理三剑客之sed命令_第23张图片

9.4 修改指定单个字符

sed 'y/123/789/' data4

linux文本处理三剑客之sed命令_第24张图片

当一行中包含多个要修改的单个字符时,默认全部修改:

echo "This 1 is a test of 1 try." | sed 'y/123/456/'

在这里插入图片描述

10. 打印匹配到的内容

linux文本处理三剑客之sed命令_第25张图片

11. 显示行号:’=’

sed '=' data1

linux文本处理三剑客之sed命令_第26张图片

12. 参数r:组合两个文件

12.1 添加到指定行后

sed '3r data5' data1			#将data5添加到data5中第三行后面

linux文本处理三剑客之sed命令_第27张图片

12.2 添加到包含指定信息行的后面

sed '/number2/r data5' data4

linux文本处理三剑客之sed命令_第28张图片

你可能感兴趣的:(运维,shell)