You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sed调整BibTeX文件中作者姓名的格式?

解决BibTeX作者姓名格式转换的Sed命令

首先,我们需要处理BibTeX文件中Author字段的姓名格式,将“名 姓”转换为“姓, 名”,同时保留分隔符and和特殊格式(比如~非断空格)。

正确的Sed命令(适用于Windows下的GNU sed.exe)

sed.exe -i.bak '/^ *Author *=/ s/\({ \|and \)\([A-Za-z.~]\+\) \([A-Za-z'-]\+\)/\1\3, \2/g' file.bib

如果想使用更易读的扩展正则表达式,可以添加-E选项:

sed.exe -i.bak -E '/^ *Author *=/ s/(\{|and )([A-Za-z.~]+) ([A-Za-z'-]+)/\1\3, \2/g' file.bib

命令解析

让我们拆解一下这个命令的各个部分:

  • -i.bak:直接修改原文件,并创建一个后缀为.bak的备份文件(Windows下sed的-i选项需要指定备份后缀,避免出现异常)
  • /^ *Author *=/:仅匹配以0个或多个空格开头,接着是Author,然后是=的行(确保只处理作者字段,不会误改其他内容)
  • 替换规则 s/.../.../g:
    • (\{|and ):匹配两种前缀——要么是字段开头的{,要么是分隔作者的and (注意and后面的空格)
    • ([A-Za-z.~]+):匹配作者的“名”部分,允许字母、点号和非断空格~(覆盖单个首字母如A.、带中间名的A.~G.等常见情况)
    • ([A-Za-z'-]+):匹配作者的“姓”部分,允许字母、连字符和撇号(覆盖像O'Conner、van-der-Sar这类特殊姓氏)
    • \1\3, \2:将匹配到的内容替换为「前缀 + 姓 + 逗号空格 + 名」,完全保留原有的分隔符和格式

你之前尝试的命令问题

你的原命令有几个关键问题:

  1. 正则模式过于局限:你硬编码了名的格式为[A-Za-z]\.[A-Za-z]\.,只能匹配两个首字母的情况,无法处理单个首字母(如A.)或带~的情况(如A.~G.)
  2. 错误的量词写法:在基本正则表达式(BRE)中,{2,}需要转义为\{2,\},否则会被当作字面量字符处理,导致姓氏匹配失败
  3. 不必要的大括号匹配:你在模式末尾加了\},这意味着只有最后一个作者(后面跟着})会被匹配,中间的作者因为后面是and而无法被替换

内容的提问来源于stack exchange,提问作者Sergio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:54:13