首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sed或tr删除“[数字]”之类的字符串?

如何使用sed或tr删除“[数字]”之类的字符串?
EN

Unix & Linux用户
提问于 2021-02-25 17:29:57
回答 2查看 211关注 0票数 2

我最近不得不处理大量下载的文件,其中包括许多烦人的"[...]“在文本中。如下所示:

从电纺膜/支架中局部传递多种生长因子例如血小板衍生生长因子和BMP 2.已被证明能提高体外41的细胞活性以及体内47的骨再生。由于篇幅的限制,作者建议读者参考最近发表的关于这个主题的尚未发表的评论来了解更多的细节34-36。

期望产出:

从电纺膜/支架中局部传递多种生长因子例如血小板衍生生长因子和BMP 2.已被证明能提高体外细胞活性和体内骨再生。由于篇幅有限,作者建议读者参考最近发表的关于这一主题的尚未发表的评论来了解更多细节。

如何使用trsed删除这个"[digits]"?我试过了

代码语言:javascript
复制
tr -d '[\*]' 

sed 's/[[*]]//g'

但两者都不起作用。

我应该在哪里转义,如果不删除括号中的其他字符(如例如血小板衍生生长因子和BMP 2. ),如何删除这些字符?

EN

回答 2

Unix & Linux用户

发布于 2021-02-25 17:42:36

试试这个:

代码语言:javascript
复制
# it also removes the extra spaces
$ sed -e 's/\[[0-9–]*\]//g;s/[[:blank:]]\+/ /g;s/[[:blank:]]\([\.?!:;,]\+\)/\1/g' file

输出:

从电纺膜/支架中局部传递多种生长因子(如血小板衍生生长因子和骨形态发生蛋白)已被证明能提高体外细胞活性和体内骨再生。由于篇幅的限制,作者建议读者参考最近发表的关于这一主题的尚未发表的评论来了解更多细节。

票数 1
EN

Unix & Linux用户

发布于 2021-02-25 17:42:54

您需要匹配[,然后是一个或多个数字,然后是]

  • []在正则表达式中被认为是特殊字符,因此必须用前导反斜杠转义它们。
  • 数字既可以表示为[0-9],也可以表示为[[:digit:]]
  • 您需要多个数字,所以使用+表示一个或多个数字

所以

代码语言:javascript
复制
sed -E 's/\[[[:digit:]]+\]//g'

要匹配一个数字范围,例如在您的示例中的[34–36],您需要稍微扩展模式,即[数字-- 数字]。(请注意,这个破折号似乎不是一个标准的连字符,而是稍长的恩达什,甚至可能是埃姆达什。)

代码语言:javascript
复制
sed -E 's/\[[[:digit:]]+–[[:digit:]]+\]//g'

为了同时匹配这两个数字,您需要将破折号和第二个数字放在括号( . )中,然后用?声明它。

代码语言:javascript
复制
sed -E 's/\[[[:digit:]]+(–[[:digit:]]+)?\]//g'

我一直使用sed -E来表示扩展正则表达式(ERE),这意味着更多字符是隐式特殊的,不需要用反斜杠标记。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/636399

复制
相关文章

相似问题

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