LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 208|回复: 0

替换编辑命令

[复制链接]
发表于 2024-1-4 19:16:49 | 显示全部楼层 |阅读模式

替换编辑命令


替换编辑命令(s)语法如下:

[address]s/pattern/replacement/flags

这里flags是替换命令(s)的修饰标志,有如下几个:

n1-512之间的数字,表示对文本模式pattern中指定模式第n次出现的情况进行替换
g对模式空间的所有出现的情况进行全局更改,没有g时通常只有第一次出现的情况被更改
p打印模式空间的内容
w file将模式空间的内容写入到文件file中
修饰标志flags可以混合使用,只要有意义。

替换命令应用于与地址匹配的行,如果没有指定地址,就应用于匹配的所有行。地址需要一个作为定界符的斜杠”/“,和地址不同的是,正则表达式可以用任意字符来分隔,只有换行符除外。因此,如果模式包含斜杠,那么可以选择另一个字符作为定界符,例如感叹号

1
s!/usr/lib!/usr/lib64!
上面定界符揣想那了三次,而且在替代字符串之后是必需的。不管使用哪种定界符,如果它出现在正则表达式中,或者在替换文本中,那么就用反斜杠将它转义。

replacement是一个字符串,用来替换与模式(正则表达式)匹配的内容。在replacement部分,只有如下字符具有特殊的含义:

&由正则表达式匹配的字符串进行替换

\n匹配第n个子字符串(n是一个数字),这个子字符串是在模式中使用”\(“和”\)”指定的。

\用于转义字符”&”、反斜线”\“等字符。另外,它用于转义换行符并创建多行replacement字符串。

因此,除了正则表达式中的元字符以外,sed的替换部分也有元字符。

下面一个示例:假设我们有一个文件file,其中每行有3个制表符,然后我们使用换行符取代每行上的第二个制表符,如下:


#要处理的文本at.txt
word1        word2        word3        word4
#sed脚本内容
s/\t/\
/2
#执行处理
[root@test ~]# sed -f sed.txt at.txt
word1   word2
word3   word4
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表