gpt4 book ai didi

linux - 使用 awk 替换第 n 次出现的模式

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:15 26 4
gpt4 key购买 nike

<分区>

我正在尝试替换文本文件中字符串的 次出现。

背景:我有一个巨大的 bibtex 文件(称为 in.bib),其中包含数百个以“@”开头的条目。但是每个条目都有不同的行数。我想在每次(比方说)第 6 次出现“@”之前写一个字符串(例如“#”),因此,在第二步中,我可以使用 csplit 将大文件拆分为“#"放入每个包含 5 个条目的文件中。

问题是找到并替换每五个“@”。

由于我反复需要它,建议的答案在 printing with sed or awk a line following a matching pattern 中不会做这项工作。同样,我不只是在寻找一个匹配的地方,而是在寻找许多匹配的地方。

我目前拥有的:

awk '/^@/ && v++%5 {sub(/^@/, "\n#\n@")} {print > "out.bib"}' in.bib

替换第 2 到第 5 次出现(不再出现)。(顺便说一句,我在这里找到并采用了这个解决方案:“Sed replace every nth occurrence ”。最初,它是为了取代每一秒的出现——它确实做到了。)

然后,第二个:

awk -v p="@" -v n="5" '$0~p{i++}i==n{sub(/^@/, "\n#\n@")}{print > "out.bib"}' in.bib

恰好替换了第 5 次出现,仅此而已。(从这里采用的解决方案:“Display only the n'th match of grep

我需要的(但不能写)是恕我直言的循环。 for 循环会完成这项工作吗?像这样的东西:

for (i = 1; i <= 200; i * 5)
<find "@"> and <replace with "\n#\n@">
then print

我的资料是这样的:

@article{karamanic_jedno_2007,
title = {Jedno Kosova, Dva Srbije},
journal = {Ulaznica: Journal for Culture, Art and Social Issues},
author = {Karamanic, Slobodan},
year = {2007}
}

@inproceedings{blome_eigene_2008,
title = {Das Eigene, das Andere und ihre Vermischung. Zur Rolle von Sexualität und Reproduktion im Rassendiskurs des 19. Jahrhunderts},
comment = {Rest of lines snippet off here for usability -- as in following entries. All original entries may have a different amount of lines.}
}

@book{doring_inter-agency_2008,
title = {Inter-agency coordination in United Nations peacebuilding}
}

@book{reckwitz_subjekt_2008,
address = {Bielefeld},
title = {Subjekt}
}

我想要的是第六个条目看起来像这样:

#
@book{reckwitz_subjekt_2008,
address = {Bielefeld},
title = {Subjekt}
}

感谢您的帮助。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com