我有一个文件,其中包含按键索引的条目:
\newglossaryentry{[alpha key]}
{
[some lines with arbitrary content]
}
两个条目可以由一行或多行分隔。我如何根据它们的键对这些条目进行排序?一个附属问题是这个模式的正则表达式是什么?
谢谢。
答案1
perl -0ne 'print join "\\", sort split(/^\\/m)' input.txt
这是基于按行组对文件进行排序答案由@αГsнιη链接。
它将整个输入文件分割成一个数组,使用正则表达式^\
作为分隔符。然后它打印排序后的数组,其中数组元素由单个\
字符连接。
连接是必要的,因为它会放回\
在拆分操作期间删除的字符。
注意:此脚本根本不关心术语表定义的内容。它所做的只是根据以 开头的行将输入拆分为数组\
。
这意味着如果有任何输入行前第一个\newglossary
条目将按排序顺序打印(因为它们成为数组元素 0)。如果没有这样的行,则数组元素 0 为空,并且首先打印(因为空字符串在其他所有内容之前排序),但不会产生可见的输出(因为它是空的)。
如果有任何文本行后最后一个\newglossary
条目,无论该条目排序到哪里,它们都会被打印,因为脚本认为它们是该条目的一部分。
如果两个条目之间存在任意文本,也会发生同样的事情 - 这些行成为这两个条目中第一个条目的一部分。