sed文本处理

sed文本处理

概述

	sed [sed] = Stream[striːm] 溪流 EDitor 是一种非交互式的流编辑器,通过多种转换修改流经它的文本。

	它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern[ˈpætərn] space[speɪs]),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

	文件内容并没有改变,除非你使用重定向存储输出。

	sed可做的编辑工作包括删除、查找替换、添加、插入、从其他文件中读入数据等。

	要想保存修改后的文件,必须使用重定向生成新的文件。如果想直接修改源文件本身则需要使用“-i”参数。

使用场景

  • 常规编辑器编辑困难的文本。
  • 太过于庞大的文本,使用常规编辑器难以胜任(比如说vi一个几百兆的文件)。
  • 有规律的文本修改,加快文本处理速度(比如全文替换)。

sed 语法

	sed [options] 'command' file

	options是sed可以接受的参数

	command是sed的命令集(一共有25个)

demo

# 创建文件
vim Sed.txt
# 写入以下内容
this is line 1,this is First line
this is line 2,the Second line,Empty line followed

this is line 4,this is Third line
this is line 5,this is Fifth line



# 删除命令 使用d命令可删除指定的行


# 将文件的第一行删除后输出到屏幕
sed '1d' Sed.txt

# sed默认不修改原文件,如果希望保存修改后的文件则需要用重定向
sed '1d' Sed.txt > saved_file

# 如果想直接修改文件,使用‘-i’参数
sed -i '1d' saved_file
cat saved_file

# 删除指定范围的行(第1行到第3行)
sed '1,3d' Sed.txt

# 删除第3行到最后行
sed '3,$d' Sed.txt

# 删除最后一行
sed '$d' Sed.txt

# 删除所有包含‘Empty’的行
sed '/Empty/d' Sed.txt

# 删除空行
sed '/^$/d' Sed.txt


# 查找替换命令 使用s命令可将查找到的匹配文本内容替换为新的文本,默认情况只替换第一次匹配到的内容


# 查找line替换为LINE
sed 's/line/LINE/' Sed.txt

# 如果想只替换第二个匹配到的line为LINE
sed 's/line/LINE/2' Sed.txt

# 使用g选项,可以完成所有匹配值的替换
sed 's/line/LINE/g' Sed.txt

# 将以this开头的this替换为that
sed 's/^this/that/' Sed.txt


# 使用-e参数和分号连接多编辑命令
# -e参数本身只是sed的一个简单参数,表示将下一个字符串解析成sed编辑命令,一般情况下可以忽略,但是当sed需要传递多个编辑命令时该参数就不能少了。
# 将this改为That的同时,还要将line改成LINE
sed -e 's/this/That/g' -e 's/line/LINE/g' Sed.txt
# 使用分号连接两个编辑命令也可以
sed 's/this/That/g ;s/line/LINE/g' Sed.txt


# 过滤出ens37网卡的IP地址和掩码信息
ip a s ens37 | grep '\<inet\>' | sed 's/^.*inet //' | sed 's/brd.*$//'
# ifconfig ens37 | grep '\<inet\>' | sed 's/^.*inet //' | sed 's/broadcast.*$//'


# 字符转换命令 使用y命令可以进行字符转换,其作用为将一系列字符逐个地变换为另外一系列字符
# 注意转换字符和被转换字符的长度要相等,否则sed无法执行


# 将file中的1转换为A、2转换为B…………
sed 'y/1245/ABCD/' Sed.txt


# 插入文本命令
# 使用i或a命令插入文本,其中i代表在匹配行之前插入,而a代表在匹配行之后插入


# 使用i在第二行前插入文本
sed '2 i Insert' Sed.txt

# 使用a在第二行后插入文本
sed '2 a Insert' Sed.txt

# 在匹配行的上一行插入文本
sed '/Second/i\Insert' Sed.txt

# 如果要同时新增多行,则每行之间要用反斜杠\n来进行新行的添加
sed '2 a\insert\ninsert2\ninsert3' Sed.txt


# 取代行命令 c命令,c的后面可以接字符串,这些字符串可以取代n1,n2之间的行
sed '2,4 c this is 2-4 line' Sed.txt


# 读入文本 使用r命令可从其他文件中读取文本,并插入匹配行之后


# 将/etc/passwd中的内容读出放到Sed.txt空行之后
sed '/^$/r /etc/passwd' Sed.txt


# 打印 使用p命令可进行打印
# 这里使用sed命令时一般都加-n参数,表示不打印没关系的行。
# 不加-n参数,会输出所有行,找到的行会重复显示
sed '/the/p' Sed.txt
sed -n '/the/p' Sed.txt


###########################################################################################

# sed脚本方式
# 使用sed脚本可以加快工作效率

# 创建文件
vim sed01.rules
# 编写脚本文件 作用是将全文的this改成THAT,并删除所有空行
s/this/THAT/g
/^$/d

# 执行sed脚本
# 调用sed命令并使用-f参数指定文件
sed -f sed01.rules Sed.txt


# shell 脚本方式
# 还可以在脚本中声明以sed命令运行
vim sed02.rules
# 写入以下内容
#!/usr/bin/sed -f
s/this/THAT/g
/^$/d

# 脚本文件增加执行权限
chmod +x sed02.rules

# 执行脚本
./sed02.rules Sed.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值