shell脚本(六)sed命令行编辑器

本文详细介绍了sed编辑器的使用,包括如何进行文本替换,如s命令的使用,替换标记的应用,以及如何更改替换分隔符。此外,还讲解了删除指定行、插入和附加文本、修改整行内容以及转化字符的功能。sed编辑器在处理数据流中的文本操作上非常灵活,是Linux系统中强大的文本处理工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sed编辑器被称为流编辑器。sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在命令文本文件中。sed命令并不会影响原本文件,只会重新把改变的内容输出,如果需要改变原本内容需要用-i选项,sed -i

sed命令格式

sed [options] [script] [file]

修改文本内容

#s命令会将斜杠(/)指定的第二个字符串替换第一个字符串 
echo "this is text" | sed 's/this/that/' 
#修改文件内容,默认只会替换每行中出现的第一处 
sed 's/this/that/' /home/text 
#多命令修改内容,通过-e选项,通过分号(;)分割 
sed -e 's/this/that/;s/is/iss/' /home/text

默认只会替换没行出现的第一处,如果想要多替换需要使用替换标记

#格式。替换标记放在最后 
s/pattern/replacement/flags

四种可用的替换标记

1、数字,表明新文本将替换第几处模式匹配的地方

2、g,表明新文本将会替换所有匹配的文本

3、p,表明原先行的内容要打印出来

4、w file ,将替换的结果写到文件中

#替换文件中内容命令格式:sed 's/zqq/httlo/flags' filepath 
#替换第二处出现的字符串 
echo "zqq zqq test" | sed 's/zqq/hello/2' 
#替换所有匹配字符串 
echo "zqq zqq test" | sed 's/zqq/hello/g' 
#替换行内第一处匹配的字符串,然后并打印原字符串,-n选项 
echo "zqq zqq test" | sed -n 's/zqq/hello/p' 
#将替换结果写到文件中,只会把有匹配内容的字符串写到文件 
echo "zqq zqq test" | sed "s/zqq/hello/w /home/text"

替换分隔符

默认情况下sed命令是以反斜杠为分隔符,在linux中反斜杠用到的地方很多,在文本内容有反斜杠时需要用反斜杠(\)来转义,看起来很不方便,sed编辑器允许选择其他字符来作为替换命令中的分隔符

#用!来替代/ 
echo "zqq/zqq hello" | sed 's!/zqq/zqq!zqq!g'

删除命令

sed编辑器可以删除固定的行

#删除文件第三行 
sed '3d' /home/text 
#删除指定区间,第二行,第三行 
sed '2,3d' /home/text 
#删除包含指定内容的行 
sed '/hello world/d' /home/text

插入和附加文本

sed编辑器允许向数据流插入喝附近文本。插入(i)会在指定行前增加一个新行。附加(a)会在指定行后增加一个新行

#将一个新行插入到数据第三行前 
sed '3i\hello world' /home/text 
#将新行插入第三行后 
sed '3a\hello world' /home/text 
#将新行插在末尾 
sed '$a\hello world' /home/text

修改行

修改命令(c)允许修改数据流中整行文本的内容

#修改第三行内容 
sed '3c\hello world' /home/text 
#修改匹配内容的所有文本行,把包含zqq的内容修改修改成hellworld 
sed '/zqq/c\hello wolrd' /home/text 
#将多行文本替换指定文本,将2,3行替换成hello wolrd 
sed '2,3c\hello world' /home/text

转化命令

转化命令(y)是可以处理单个字符的sed编辑器命令

#第一位7会替换前面的1,8会替换2,注意123和789不是一个字符,而是对应的位替换对应的单个字符, 
#如果前后字符数不相等会产生一条错误信息 
echo 'y/123/789/' /home/text 
#替换1,2,3 
echo "hello 1,2,3" | sed 'y/123/789/'

打印内容

#打印匹配zqq的行 
sed -n '/zqq/p' /home/text 
#打印第2行到第5行 
sed -n '2,5p' /home/text
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值