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

985*_*nch 5 sed

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

*252
253
254
255
(blank line here)
Run Code Online (Sandbox Code Playgroud)

或者

*261
265
(blank line here)
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*024 7

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

sed '/[*]/,/^$/d' filename
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 由于*是一个正则表达式活动字符,我们只想匹配一个文字*,我们需要转义*. 这可以按照\*或如上所示完成[*]

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

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

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

以上产生输出到标准输出。要就地更改文件,请使用:

sed -i.bak '/[*]/,/^$/d' filename
Run Code Online (Sandbox Code Playgroud)

例子

考虑这个示例文件:

$ cat filename
*252
253
254
255

OR
*261
265

end
Run Code Online (Sandbox Code Playgroud)

这产生:

$ sed '/[*]/,/^$/d' filename
OR
end
Run Code Online (Sandbox Code Playgroud)