AWK:如何清理bibtex文件?

AWK:如何清理bibtex文件?,awk,bibtex,Awk,Bibtex,我有一个bibtex文件(从Zotero导出),我想通过删除特定字段来清理它 例如,从以下条目中删除文件字段: @inproceedings{sridharan_fast_2008, title = {Fast {Rates} for {Regularized} {Objectives}.}, urldate = {2014-03-26}, booktitle = {{NIPS}}, author = {Sridharan, Karthik and Shalev-

我有一个bibtex文件(从Zotero导出),我想通过删除特定字段来清理它

例如,从以下条目中删除文件字段:

@inproceedings{sridharan_fast_2008,
    title = {Fast {Rates} for {Regularized} {Objectives}.},
    urldate = {2014-03-26},
    booktitle = {{NIPS}},
    author = {Sridharan, Karthik and Shalev-Shwartz, Shai and Srebro, Nathan},
    year = {2008},
    pages = {1545--1552},
    file = {3400-fast-rates-for-regularized-objectives.pdf:/home/johnros/.zotero/zotero/66g0wvis.default/zotero/storage/6ND67P5F/3400-fast-rates-for-regularized-objectives.pdf:application/pdf}
}

使用
grep
可以很容易地做到这一点:

grep -v "^\s*file =" bibtext.txt
前一条记录上的尾随逗号不应该是问题

或者,如果您真的喜欢awk:

awk '!/file = /' bibtext.txt

使用
grep
可以很容易地做到这一点:

grep -v "^\s*file =" bibtext.txt
前一条记录上的尾随逗号不应该是问题

或者,如果您真的喜欢awk:

awk '!/file = /' bibtext.txt

我不熟悉
bibtex
格式,如果有一些工具可以更好地编辑这些格式,你应该选择这些工具

如果您想使用
awk
来处理它,这里有一个gnu awk one liner:

awk -v RS=',\n\\s*file\\s*=\\s[^\\n]*' '7' file
基本上,它只是在玩
RS
变量,以删除
文件=
行以及前一个结束逗号
“,”
,从而保持生成的输出仍然是有效的bibtex格式。(我希望是这样)

用您的示例进行测试:

kent$  cat f
@inproceedings{sridharan_fast_2008,
    title = {Fast {Rates} for {Regularized} {Objectives}.},
    urldate = {2014-03-26},
    booktitle = {{NIPS}},
    author = {Sridharan, Karthik and Shalev-Shwartz, Shai and Srebro, Nathan},
    year = {2008},
    pages = {1545--1552},
    file = {3400-fast-rates-for-regularized-objectives.pdf:/home/johnros/.zotero/zotero/66g0wvis.default/zotero/storage/6ND67P5F/3400-fast-rates-for-regularized-objectives.pdf:application/pdf}
}

kent$  awk -v RS=',\n\\s*file\\s*=\\s[^\\n]*' '7' f
@inproceedings{sridharan_fast_2008,
    title = {Fast {Rates} for {Regularized} {Objectives}.},
    urldate = {2014-03-26},
    booktitle = {{NIPS}},
    author = {Sridharan, Karthik and Shalev-Shwartz, Shai and Srebro, Nathan},
    year = {2008},
    pages = {1545--1552}

}

我不熟悉
bibtex
格式,如果有一些工具可以更好地编辑这些格式,你应该选择这些工具

如果您想使用
awk
来处理它,这里有一个gnu awk one liner:

awk -v RS=',\n\\s*file\\s*=\\s[^\\n]*' '7' file
基本上,它只是在玩
RS
变量,以删除
文件=
行以及前一个结束逗号
“,”
,从而保持生成的输出仍然是有效的bibtex格式。(我希望是这样)

用您的示例进行测试:

kent$  cat f
@inproceedings{sridharan_fast_2008,
    title = {Fast {Rates} for {Regularized} {Objectives}.},
    urldate = {2014-03-26},
    booktitle = {{NIPS}},
    author = {Sridharan, Karthik and Shalev-Shwartz, Shai and Srebro, Nathan},
    year = {2008},
    pages = {1545--1552},
    file = {3400-fast-rates-for-regularized-objectives.pdf:/home/johnros/.zotero/zotero/66g0wvis.default/zotero/storage/6ND67P5F/3400-fast-rates-for-regularized-objectives.pdf:application/pdf}
}

kent$  awk -v RS=',\n\\s*file\\s*=\\s[^\\n]*' '7' f
@inproceedings{sridharan_fast_2008,
    title = {Fast {Rates} for {Regularized} {Objectives}.},
    urldate = {2014-03-26},
    booktitle = {{NIPS}},
    author = {Sridharan, Karthik and Shalev-Shwartz, Shai and Srebro, Nathan},
    year = {2008},
    pages = {1545--1552}

}

我知道这是一个更老的问题,但对于那些仍然发现这一点的人来说:Zotero()有一个扩展,允许您在Zotero内部完成这项工作。完全披露:我是这个扩展的作者

我知道这是一个更老的问题,但对于那些仍然发现这一点的人来说:Zotero()有一个扩展,允许您在Zotero本身内部执行此操作。完全披露:我是这个扩展的作者

我最欣赏的是
bibtex
文档的链接我猜
页面=…
行上的逗号(
)也应该删除,这样我们可以使输出仍然“格式一致”?@Kent-根据我包含的链接,这不要紧-我想这取决于你是纯粹主义者还是实用主义者:-)我最欣赏的是
bibtex
文档的链接我猜
页面=…
上的逗号(
)也应该删除,这样我们就可以使输出仍然“格式一致”@Kent-根据我包含的链接,这不重要——我想这取决于你是纯粹主义者还是实用主义者:-)