我一直在使用这个论坛,所以我现在才加入!我见过类似的问题,但到目前为止没有任何效果(主要使用 sed)。我想在文件中找到星号 (*) 的每个实例,并将其及其后面的所有内容删除,直到到达空行。例如:
*252
253
254
255
(blank line here)
或者
*261
265
(blank line here)
每个数据块的长度都会有所不同。然后我想让输出转到一个新文件。有任何想法吗?
答案1
*
要从包含下一个空行的行中删除,请使用:
sed '/[*]/,/^$/d' filename
笔记:
由于
*
是一个正则表达式活跃字符,并且我们只想匹配文字*
,因此我们需要转义*
.这可以通过 或 来完成\*
,如上所示[*]
。^
为了匹配空行,我们需要在其开头(表示为)和结尾(表示为 )之间没有任何字符的行$
。因此^$
匹配一个空行。/[*]/,/^$/
是一个范围:它匹配一组以包含空行的行开头*
并以空行结尾的行。d
告诉 sed 删除范围内的任何行。
上面的代码会输出到标准输出。要就地更改文件,请使用:
sed -i.bak '/[*]/,/^$/d' filename
例子
考虑这个示例文件:
$ cat filename
*252
253
254
255
OR
*261
265
end
这会产生:
$ sed '/[*]/,/^$/d' filename
OR
end