我一直在使用这个论坛,所以我现在才加入!我见过类似的问题,但到目前为止没有任何效果(主要是使用 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)
每个数据块的长度会有所不同。然后我想让输出转到一个新文件。有任何想法吗?
要从包含*
到下一个空行的行中删除,请使用:
sed '/[*]/,/^$/d' filename
Run Code Online (Sandbox Code Playgroud)
笔记:
由于*
是一个正则表达式活动字符,我们只想匹配一个文字*
,我们需要转义*
. 这可以按照\*
或如上所示完成[*]
。
为了匹配一个空行,我们需要一行在开始(表示^
)和结束(表示)之间没有字符$
。因此^$
匹配一个空行。
/[*]/,/^$/
是一个范围:它匹配一组以包含行开始*
并以空行结束的行。
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)