使用sed注释掉包含特定文本字符串的行

时间:2014-07-12 21:36:33

标签: sed

请耐心等待我,因为我是新来的论坛,并在发布之前尝试进行我的研究。我要做的是使用sed来查看文件的多行以及包含“CPU Usage”字样的任何行我希望它注释掉该行以及之后的19行。

示例file.txt

This is some random text CPU USAGE more random text
Line2
Line3
Line4
Line5
etc.

我希望sed找到文本CPU使用情况的字符串并注释掉该行以及后面的19行

#This is some random text CPU USAGE more random text
#Line2
#Line3
#Line4
#Line5
#etc.

这就是我一直在尝试但显然它没有用,因为我在这里寻求帮助

sed '/\/(CPU Usage)s/^/#/+18 > File_name
sed: -e expression #1, char 17: unknown command: `^'

我希望能够在多个文件上使用它。非常感谢您提供的任何帮助!

3 个答案:

答案 0 :(得分:4)

GNU sed有一个非标准的扩展程序(好吧,它有很多非标准的扩展程序,但这里有一个与此相关的扩展名)允许/pattern/,+N表示从匹配pattern的行到该行加上N。

我不太确定您对sed命令对模式的\/部分的期望是什么,并且您在所显示的内容中错过了单引号,但这就是诀窍:

sed '/CPU Usage/,+19 s/^/#/'

如果您要覆盖原始文件,请添加-i .bak(如果您不介意丢失原件,请添加-i。)

如果您没有GNU sed,现在可能是安装它的好时机。

答案 1 :(得分:1)

使用awk

可以轻松完成此操作
awk '/CPU Usage/ {f=20} f && f-- {$0="#"$0}1' file

找到CPU Usage后,设置标记f=20
如果标记f为真,则递减直到0并且每次都在行前添加#并打印它。

答案 2 :(得分:0)

认为这应该有用,无法测试,如果有人发现错误,请告诉我:)

awk '/CPU Usage/{t=1}t{x++;$0="#"$0}x==19{t=0;x=0}1' file