我试图在文本文件中每次出现一个字符串,以取代。使用awk替换每个第n次出现的图案
背景: 我有一个巨大的bibtex文件(名为in.bib),其中包含数百个以“@”开头的条目。但是每个条目都有不同数量的行。我想在每个(比如说)第6次出现“@”之前写一个字符串(比如“#”),所以我可以使用csplit将“#”处的巨大文件拆分成包含每个5个条目。
问题是要找到并替换每五分之一的“@”。
因为我需要它反复,在printing with sed or awk a line following a matching pattern建议的答案不会做这项工作。再次,我不只是在寻找一个匹配的地方,而是寻找其中的很多。
我有什么至今:
awk '/^@/ && v++%5 {sub(/^@/, "\n#\[email protected]")} {print > "out.bib"}' in.bib
取代2日至5日次数(没有更多)。 (顺便说一句,我发现这里采用此解决方案: “Sed replace every nth occurrence” 最初,它是为了取代每秒occurence - 这确实。)
;第二:
awk -v p="@" -v n="5" '$0~p{i++}i==n{sub(/^@/, "\n#\[email protected]")}{print > "out.bib"}' in.bib
正好替换第五次发生,没有别的。 (从这里采用的解决方案:“Display only the n'th match of grep”
我需要什么(而不是能写)是恕我直言,一个循环将一个for循环做的工作喜欢的东西:?
for (i = 1; i <= 200; i * 5)
<find "@"> and <replace with "\n#\[email protected]">
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}
}
感谢您的帮助。
你看过http://stackoverflow.com/a/17914105/1745001了吗?如果这不能提供答案,请编辑您的问题以包含简洁,可测试,样本输入和预期输出,我们可以为您提供帮助。 –
谢谢,但提供的答案不能解决上述问题。编辑我的问题,使事情更清晰。 – jakr