Altera a ordem das entradas

0

Eu tenho um arquivo cheio das seguintes entradas, semelhante ao seguinte:

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

Eu preciso de um script para que todos eles sejam alterados para que:

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

Basicamente, o que aconteceu é que eu criei entradas de índice para um arquivo LaTex e obtive a ordem das entradas de índice para trás. Tem que haver um script que possa consertar isso. Alguém tem alguma ideia?

    
por Jeff Schaller 08.10.2018 / 14:45

3 respostas

1

Você pode fazer isso da seguinte maneira com Perl :

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

Breve explicação:

  • selecione em colchetes de captura a parte à esquerda de quais mentiras \index{ e o fechamento mais próximo } à direita.
  • dividir em bang, reorganizar as partes divididas e reingressar com estrondo.
  • repita isso na linha quantas vezes esse combo for encontrado.
por 08.10.2018 / 16:31
0

Você pode tentar awk da seguinte forma:

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} 

ou perl

perl -n -p -e ' s#(\index\{)([^!]+)\!([^!]+)\!([^!]+)\}#$1$4\!$3\!$2\}#g'
\index{c!b!a} \index{large!medium!small} \index{elephant!dog!mouse} 
    
por 08.10.2018 / 14:47
0
sed -E 's/\{([^!]*)!([^!]*)!([^}]*)}/{!!\}/g'

Exemplo:

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