0

我想将包含关键字的行更改为空白

这就是我最初的想法

sed -i "/.*$keyword.*/c\ " file;

但这实际上用空格替换了行因此当我搜索空白行时"^$"不起作用

我能做些什么呢?

4

2 回答 2

3

: 流编辑器

使用 sed,您可以通过其编号内容来寻址一行:

'/keyword/s/.*//'

意思是:

  • 在包含关键字的行上,将所有内容替换为空。

c\命令

我还没有使用c\语法......为了正确回答这个问题,我试过这个:

seq 1 5 |  sed '/3/c\'| hd
00000000  31 0a 32 0a 34 0a 35 0a                           |1.2.4.5.|
00000008

这没有给出预期的结果。

seq 1 5 |  sed '/3/c\ '| hd
00000000  31 0a 32 0a 20 0a 34 0a  35 0a                    |1.2. .4.5.|
0000000a

反映这个问题的意思,

seq 1 5 |  sed -e '/3/c\\n'| hd
00000000  31 0a 32 0a 0a 0a 34 0a  35 0a                    |1.2...4.5.|
0000000a

不要给出出席的结果,最后

seq 1 5 |  sed '/3/c\\'| hd
00000000  31 0a 32 0a 0a 34 0a 35  0a                       |1.2..4.5.|
0000000a

似乎是这个问题的正确答案:您必须在命令中添加一个前导反斜杠才能产生一个空行。c\

sed -e '/keyword/c\\'

其他方式

替换字符串

我的第一个想法是使用emtpy字符串替换所有内容

sed -e '/keyword/s/.*//'

删除行

问题建议使用c\命令:

sed -e '/keyword/c\\'

使用空的保持空间

@Kalanidhi 建议使用保持缓冲区,如果它们是空的,它可以工作,但是通过使用g而不是G命令,

来自info sed

`g' 将模式空间的内容替换为保持空间的内容

`G' 在模式空间的内容中添加一个换行符,然后将保持空间的内容附加到模式空间的内容中。

所以使用这个想法的命令可能是:

sed -e '/keyword/g'

清空模式空间的内容

但我认为重新阅读页面,@potong (+1)info sed建议使用更合适的命令,使用命令z

来自info sed

`z' 这个命令清空模式空间的内容

sed -e '/keyword/z'
于 2014-12-29T09:43:48.340 回答
2

这可能对您有用(GNU sed):

sed -i "/$pattern/z" file
于 2014-12-29T12:13:07.933 回答