对多行表达式进行排序

对多行表达式进行排序

我有一个文件,其中包含按键索引的条目:

\newglossaryentry{[alpha key]}
{
    [some lines with arbitrary content]
}

两个条目可以由一行或多行分隔。我如何根据它们的键对这些条目进行排序?一个附属问题是这个模式的正则表达式是什么?

谢谢。

答案1

perl -0ne 'print join "\\", sort split(/^\\/m)' input.txt 

这是基于按行组对文件进行排序答案由@αГsнιη链接。

它将整个输入文件分割成一个数组,使用正则表达式^\作为分隔符。然后它打印排序后的数组,其中数组元素由单个\字符连接。

连接是必要的,因为它会放回\在拆分操作期间删除的字符。


注意:此脚本根本不关心术语表定义的内容。它所做的只是根据以 开头的行将输入拆分为数组\

这意味着如果有任何输入行第一个\newglossary条目将按排序顺序打印(因为它们成为数组元素 0)。如果没有这样的行,则数组元素 0 为空,并且首先打印(因为空字符串在其他所有内容之前排序),但不会产生可见的输出(因为它是空的)。

如果有任何文本行最后一个\newglossary条目,无论该条目排序到哪里,它们都会被打印,因为脚本认为它们是该条目的一部分

如果两个条目之间存在任意文本,也会发生同样的事情 - 这些行成为这两个条目中第一个条目的一部分。

相关内容