항목 순서 변경

항목 순서 변경

다음과 유사한 항목으로 채워진 파일이 있습니다.

`\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{}오른쪽에 가장 가까운 부분을 캡처 브래킷으로 선택합니다.
  • 뱅으로 나누고, 갈라진 부분을 재배치하고, 뱅으로 다시 연결해보세요.
  • 이러한 조합을 찾으려면 해당 행에서 이를 여러 번 반복하십시오.

답변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}

관련 정보