首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除带有数字序列sed的特定模式

如何删除带有数字序列sed的特定模式
EN

Stack Overflow用户
提问于 2021-06-10 03:26:59
回答 5查看 41关注 0票数 1

我对sed bash命令非常陌生,所以请尝试学习。

我目前面临着几千个标记文件需要清理,我正在尝试创建一个命令来删除以下内容的一部分

代码语言:javascript
复制
# null 864: Headline
body text

我需要在标题之前删除的任何东西都是'# null 864:‘它总是:'# null’然后是一些数字':‘我使用gnu-sed,因为我使用的是mac

到目前为止,我想出的最好的是

代码语言:javascript
复制
gsed -i '/#\snull\s([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]):\s/d' *.md

上面的方法似乎不起作用?

但是,如果我这样做了

代码语言:javascript
复制
gsed -i '/#\snull/d' *.md

它做了我想做的,但是它在身体测试中做了一些意想不到的事情。

如何控制只保留标题和正文?

EN

回答 5

Stack Overflow用户

发布于 2021-06-10 03:37:16

考虑到您想要在headline之前打印值,并且不想打印任何其他行,那么尝试如下。

代码语言:javascript
复制
sed -E -n 's/^(#\s+null\s+[0-9]+:\s+)Headline/\1/p' Input_file

如果要在标题前打印数值,且如果找不到匹配项,请打印整行,然后尝试执行以下操作:

代码语言:javascript
复制
sed -E 's/^(#\s+null\s+[0-9]+:\s+)Headline/\1/' Input_file

说明:简单的使用sed-E选项启用ERE(扩展正则表达式),然后使用seds选项进行替换。匹配#,后跟空格null,后跟空格数字冒号和空格,并将其保留在第一个捕获组中,而替换时,将其替换为第一个捕获组。

注意:上面的命令将在终端上打印值,如果你想把它们保存在原地,一旦你对上面代码的输出感到满意,就使用-i选项。

票数 1
EN

Stack Overflow用户

发布于 2021-06-10 03:40:21

如果我没理解错的话,你有这样的文件:

代码语言:javascript
复制
This should get deleted
This should too.
# null 864: Headline
body text
this should get kept

你想保留标题,以及之后的一切,对吧?您可以在awk中执行此操作:

代码语言:javascript
复制
awk '/# null [0-9]+:/,eof {print}' foo.md
票数 1
EN

Stack Overflow用户

发布于 2021-06-10 04:05:01

您可以使用awk,并使用sub将# null 864:部分替换为空字符串。

要创建新文件或覆盖同一文件,请参见this page

当1的计算结果为true时,}1将打印整行。

代码语言:javascript
复制
awk '{sub(/^# null [0-9]+:[[:blank:]]+/,"")}1' file

模式匹配

按字面意思匹配,从string

  • [0-9]+:[[:blank:]]+的开头匹配1+ digits,然后是:和1+空格

输出

代码语言:javascript
复制
Headline
body text
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67910549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档