【发布时间】:2015-11-29 07:01:54
【问题描述】:
我有一个从 Mendeley 导出的 .bib 文件,其中标题条目用双括号括起来,如下所示:
title = {{Nonparametric Permutation Tests for {\{PET{\}} functional Neuroimaging Experiments: A Primer with examples}},
我想使用 sed 检查一行是否以“title”开头,如果是,则删除第一个双括号,以及逗号前的最后一个,结果:
title = {Nonparametric Permutation Tests for {\{PET{\}} functional Neuroimaging Experiments: A Primer with examples},
我知道有关如何检查起始模式、如何转义元字符以及如何保存匹配项以供以后替换使用的良好文档,但我对正则表达式缺乏经验,到目前为止我的尝试导致垃圾或错误(例如):
sed: 1: "/^title/s/\{\{[^]]*\}\} ...": RE error: invalid repetition count(s)
有人知道这个替换问题的解决方案吗?
【问题讨论】:
-
试试
sed "s/^\(title = \){{\([^{]\+\)}},$/\1{\2},/g" input.txt -
这个没用..
-
@dpgomez:你在使用 GNU Sed 吗?您是否在
sed命令行中添加了类似-r的内容? GNUsed确实使事情变得复杂,因为 (AFAIUI) 它试图判断是否应该在-r丢失的情况下使用扩展正则表达式,并且在大括号形成这样的匹配字符串的一部分的情况下,几乎可以肯定猜错了。 -
我在 OS X 上使用 sed
-
你不会在 Mac OS X Sed 命令中添加
-E选项,是吗?