【正确答案】
D
【答案解析】 sed是一种在线编辑器,一次处理一行内容,主要用来自动编辑一个或多个文件,简化对文件的反复操作。处理过程如下:把当前处理的行存储在临时缓冲区中,称为“模式空间”,然后用sed命令对缓冲区中的内容进行处理,处理完之后,把缓冲区的内容送往屏幕,接着去处理下一行,这样不断地重复,直到文件末尾,这种处理方式默认情况下并没有改变文件的内容。
sed的使用方式为sed[-nefr][动作],选项与参数如下:
1)-n:使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的资料一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
2)-e:一般使用方法为-e<script>或-expression=<script>,表示用选项中指定的script来处理文本文件。
3)-f:直接将sed的动作写在一个文件内。
4)-r:sed的动作能支持延伸型正规表示法的语法。
5)-i:直接修改读取的文件内容,而不是输出到终端。
动作:[n1[,n2]]动作行为
n1,n2:用来表示选择进行动作的行数,例如,如果想要后面的动作在100~200行之间进行,则用100,200动作行为来表示。
下面介绍几个常用的动作行为:
1)a\:在当前行后添加一行或多行。
2)c\:用新文本替换当前行中的文本。
3)d:删除行。
4)i\:在当前行之前插入文本。
5)p:打印这一行。
6)s:用一个字符串替换另外一个字符串。
7)g:取出暂存缓冲区的内容,将其复制到模式缓冲区。
例如,1,20s/old/new/g就是把1~20行中的old替换成new。
本题中,对于选项A和选项C,a\和d分别是添加和删除的意思,显然是错误的。所以,选项A和选项C错误。
对于选项B,sed '/ERP/p' demo.log,由于没有采用安静模式,因此,会打印demo.log中包含ERP的行。默认情况sed把所有行都打印到屏幕,如果某行匹配到模式,则把该行另外再打印一遍。所以,选项B错误。
对于选项D,sed -n'/ERP/p' demo.log,-n取消默认的输出,从而只把包含ERP的行打印出来,-p是指打印行,demo.log是指定的文件。所以,选项D正确。
所以,本题的答案为D。