更改条目顺序

更改条目顺序

我有一个充满以下条目的文件,类似于以下内容:

`\index{a!b!c} \index{small!medium!large} \index{mouse!dog!elephant}`

我需要一个脚本来更改所有这些,以便:

\index{c!b!a} \index{large!medium!small} \index{elephant!dog!mouse} 

基本上发生的事情是,我为 LaTex 文件创建了索引条目,并且我向后得到了索引条目的顺序。必须有一个脚本可以解决这个问题。有人有什么想法吗?

答案1

您可以通过以下方式执行此操作Perl

perl -lpe 's|\\index\{\K.*?(?=\})|join "!", reverse split "!", $&|eg'

简要说明 :

  • 将其所在位置左侧的部分\index{ 以及最靠近右侧}的部分选择到捕获括号中。
  • 用 bang 分割,重新排列分割的部分,然后用 bang 重新连接。
  • 在线路上重复此操作多次,找到这样的组合。

答案2

您可以尝试awk如下:

echo '\index{a!b!c} \index{small!medium!large} \index{mouse!dog!elephant}' | awk '{ print gensub(/\{([^!]*)!([^!]*)!([^!]*)\}/,"{\\3!\\2!\\1}", "g") }'

\index{c!b!a} \index{large!medium!small} \index{elephant!dog!mouse} 

或者perl

perl -n -p -e ' s#(\\index\{)([^!]+)\!([^!]+)\!([^!]+)\}#$1$4\!$3\!$2\}#g'
\index{c!b!a} \index{large!medium!small} \index{elephant!dog!mouse} 

答案3

sed -E 's/\{([^!]*)!([^!]*)!([^}]*)}/{\3!\2!\1\}/g'

例子:

$ var='\index{a!b!c} \index{small!medium!large} \index{mouse!dog!elephant}'
$ echo "$var" | sed -E 's/\{([^!]*)!([^!]*)!([^}]*)}/{\3!\2!\1\}/g'
\index{c!b!a} \index{large!medium!small} \index{elephant!dog!mouse}

相关内容