다음과 유사한 항목으로 채워진 파일이 있습니다.
`\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}