命令c会替换指定的行的所有内容,替换成其后面的字符串,所有的新增,删除,替换行,这些命令前面的地址修饰都可以指定地址空间,也都可以使用正则表达式,命令会应用在选出的符合地址条件的所有行上面,例如:
sed '/^2/c hello world' test.txt
输出:
替换以2开头的行,其内容是c命令后面的字符串
替换部分字符串而不是整行
sed中除了上面的命令是针对整行进行操作的之外,还提供一个替换命令,该命令对某一行中的部分字符串进行操作,下面举一个简单的例子,还是同样的文本内容,执行下面的命令:
sed 's/aa/AA/' test.txt
输出:
s命令后面接的3个斜杠分隔的两串字符串,其含义是 s/待替换的字符串/新字符串/ 也就是说使用后面的 AA 替换文件中出现的前面的 aa 。实际上这里的替换仅仅替换每一行遇到的第一个aa,
将修改应用到文件中
我们之前做的所有实验,实际上都没有修改test.txt文件的内容,也就是说我们看到的修改结果仅仅输出到控制台上,而文件test.txt的内容是没有修改的,我们可以使用 -i 选项告诉sed直接修改文件的内容,而不是将修改结果输出到终端上,例如:
sed -i '2d' test.txt
命令运行之后,我们发现test.txt的第2行没有了
sed正则中的元字符
我们知道sed中的命令前面可以使用地址范围进行限制,表示对文件的某些符合条件的行执行相应的操作,其中我们可以使用正则表达式选出要操作的行,而sed中正则的语法可能与我们其他命令的正则语法有一些不同,这里我们有必要列出sed中常用的正则元字符:
$ 表示行尾 ^ 表示行首 [a-z0-9]表示字符范围 [^]表示除了字符集中的字符以外的字符 sed的正则中 \(\) 和 \{m,n\} 需要转义 . 表示任意字符 * 表示零个或者多个 \ 一次或多次 \? 零次或一次 \| 表示或语法
篇幅有限,关于sed命令就介绍到这了,建议大家多敲熟悉一下。后面小编会分享更多运维干货,感兴趣的朋友走一波关注哩~