Как заменить специальные символы в BibTeX (например. {\'{o}} = ó )в сценарии оболочки?

Когда необходимая последовательность команд довольно короткая и/или дает результат, который можно использовать как часть более крупного конвейера или псевдоним команды, это может быть хорошей -вкладкой.

По сути, я думаю, что один -лайнер — это обычно то, что опытный системный администратор, знакомый как с проблемой, так и с используемыми командами, может написать на месте, не слишком долго думая.

Когда один -лайнер становится чрезмерно длинным или включает в себя больше, чем очень простые условные операторы или циклы,обычно лучше писать их как многострочный -скрипт или функцию оболочки для удобочитаемости. Кроме того, если это то, что вы пишете, чтобы использовать снова и снова, или что-то, что будет использоваться (и, возможно, устранять неполадки )другими людьми, вы должны быть готовы потратить время на то, чтобы записать решение в ясной (er ), с комментариями, скриптовая форма.

В Python отступы являются частью синтаксиса, поэтому вы буквально не сможете использовать возможности языка в полной мере, если напишете один -лайнер.

Perl и awk one -лайнеры часто используют всю мощь регулярных выражений. Но некоторые называют регулярные выражения языком -только для записи, и не совсем без оснований. Написание многострочного скрипта -позволяет вам писать в комментариях, чтобы описать, что конкретное регулярное выражение должно делать, что будет очень полезно, когда вы снова посмотрите на скрипт после того, как в течение шести месяцев выполняли другие действия.

По сути, это вопрос, -основанный на личном мнении, поскольку он включает в себя определение допустимой степени сложности и поиск компромисса между удобочитаемостью и компактностью; все это в значительной степени вопросы личного суждения. Даже выбор языка может зависеть от личных обстоятельств :, если конкретный язык теоретически был бы оптимален для конкретной задачи, но вы с ним не знакомы и уже знаете, как решить задачу на каком-то другом языке, вы можете выберите знакомый язык, чтобы выполнить работу быстро и с минимальными усилиями, хотя технически решение может быть несколько неэффективным.

Лучшее часто является врагом достаточно хорошего , и здесь это очень применимо.

И если вы знакомы с Perl, вы, возможно, уже слышали о TMTOWTDI.:Существует более чем один способ сделать это.

0
21.01.2021, 17:33
1 ответ

Я думаю, что Python лучше -подходит для работы со строками и Unicode, чем Bash. Вы можете легко использовать его в Bash, и с этим простым шаблоном вам не нужно знать Python :

.
#!/usr/bin/env python3
import sys
for line in sys.stdin:
    line = line.replace(r"\'{o}",r"ó")
    line = line.replace(r'{\"{u}}',r"ü")
    line = line.replace(r'{\"{\u}}',r"ü")
    line = line.replace(r'\"{u}',r"ü")
    print(line, end='')

Использование:

  • скопировать -вставить вышеуказанное в новый текстовый файл, например.convert_tex_chars.py
  • откройте терминал и cdперейдите в каталог, где находится текстовый файл
  • сделать файл исполняемым:chmod +x convert_tex_chars.py
  • тест:echo "s\'{o}ng p\'{o}ng "'M{\"{u}}ller M{\"{\u}}ller M\"{u}ller' |./convert_tex_chars.py(это должно отображатьsóng póng Müller Müller Müller)
  • протестируйте его на файле BibTeX:cat original_bibtex_file |./convert_tex_chars.py >new_bibtex_file

Отредактируйте файл Python и добавьте или отредактируйте замены по мере необходимости. Обратите внимание, что в Python "и 'работают одинаково, поэтому используйте "", если содержимое содержит одинарную кавычку, и '', если содержимое содержит двойную кавычку. Обратите внимание, что rперед каждой строкой позволяет включать обратную косую черту, не экранируя ее(подробнее).

Если вам нужны замены регулярных выражений, вставьте import reв качестве второй строки, а затем используйте ее следующим образом::line = re.sub(r'\\', r'\\', line)(это заменяет \\на\). Первый параметр — это ваше регулярное выражение, второй — замена (обратной косой черты обрабатывается здесь ), а третий — исходная строка. См. официальные документы и сотни примеров в Интернете .

0
18.03.2021, 22:35

Теги

Похожие вопросы