删除从 * 到空行的未知行数

删除从 * 到空行的未知行数

我一直在使用这个论坛,所以我现在才加入!我见过类似的问题,但到目前为止没有任何效果(主要使用 sed)。我想在文件中找到星号 (*) 的每个实例,并将其及其后面的所有内容删除,直到到达空行。例如:

*252
253
254
255
(blank line here)

或者

*261
265
(blank line here)

每个数据块的长度都会有所不同。然后我想让输出转到一个新文件。有任何想法吗?

答案1

*要从包含下一个空行的行中删除,请使用:

sed '/[*]/,/^$/d' filename

笔记:

  1. 由于*是一个正则表达式活跃字符,并且我们只想匹配文字*,因此我们需要转义*.这可以通过 或 来完成\*,如上所示[*]

  2. ^为了匹配空行,我们需要在其开头(表示为)和结尾(表示为 )之间没有任何字符的行$。因此^$匹配一个空行。

  3. /[*]/,/^$/是一个范围:它匹配一组以包含空行的行开头*并以空行结尾的行。

  4. d告诉 sed 删除范围内的任何行。

上面的代码会输出到标准输出。要就地更改文件,请使用:

sed -i.bak '/[*]/,/^$/d' filename

例子

考虑这个示例文件:

$ cat filename
*252
253
254
255

OR
*261
265

end

这会产生:

$ sed '/[*]/,/^$/d' filename
OR
end

相关内容