Когда необходимая последовательность команд довольно короткая и/или дает результат, который можно использовать как часть более крупного конвейера или псевдоним команды, это может быть хорошей -вкладкой.
По сути, я думаю, что один -лайнер — это обычно то, что опытный системный администратор, знакомый как с проблемой, так и с используемыми командами, может написать на месте, не слишком долго думая.
Когда один -лайнер становится чрезмерно длинным или включает в себя больше, чем очень простые условные операторы или циклы,обычно лучше писать их как многострочный -скрипт или функцию оболочки для удобочитаемости. Кроме того, если это то, что вы пишете, чтобы использовать снова и снова, или что-то, что будет использоваться (и, возможно, устранять неполадки )другими людьми, вы должны быть готовы потратить время на то, чтобы записать решение в ясной (er ), с комментариями, скриптовая форма.
В Python отступы являются частью синтаксиса, поэтому вы буквально не сможете использовать возможности языка в полной мере, если напишете один -лайнер.
Perl и awk one -лайнеры часто используют всю мощь регулярных выражений. Но некоторые называют регулярные выражения языком -только для записи, и не совсем без оснований. Написание многострочного скрипта -позволяет вам писать в комментариях, чтобы описать, что конкретное регулярное выражение должно делать, что будет очень полезно, когда вы снова посмотрите на скрипт после того, как в течение шести месяцев выполняли другие действия.
По сути, это вопрос, -основанный на личном мнении, поскольку он включает в себя определение допустимой степени сложности и поиск компромисса между удобочитаемостью и компактностью; все это в значительной степени вопросы личного суждения. Даже выбор языка может зависеть от личных обстоятельств :, если конкретный язык теоретически был бы оптимален для конкретной задачи, но вы с ним не знакомы и уже знаете, как решить задачу на каком-то другом языке, вы можете выберите знакомый язык, чтобы выполнить работу быстро и с минимальными усилиями, хотя технически решение может быть несколько неэффективным.
Лучшее часто является врагом достаточно хорошего , и здесь это очень применимо.
И если вы знакомы с Perl, вы, возможно, уже слышали о TMTOWTDI.:Существует более чем один способ сделать это.
Я думаю, что 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
)cat original_bibtex_file |./convert_tex_chars.py >new_bibtex_file
Отредактируйте файл Python и добавьте или отредактируйте замены по мере необходимости. Обратите внимание, что в Python "
и '
работают одинаково, поэтому используйте ""
, если содержимое содержит одинарную кавычку, и ''
, если содержимое содержит двойную кавычку. Обратите внимание, что r
перед каждой строкой позволяет включать обратную косую черту, не экранируя ее(подробнее).
Если вам нужны замены регулярных выражений, вставьте import re
в качестве второй строки, а затем используйте ее следующим образом::line = re.sub(r'\\', r'\\', line)
(это заменяет \\
на\
). Первый параметр — это ваше регулярное выражение, второй — замена (обратной косой черты обрабатывается здесь ), а третий — исходная строка. См. официальные документы и сотни примеров в Интернете .