Множественные замены в zsh?

Решение Python:

#!/usr/bin/env python
import sys
prefix = ""
with open(sys.argv[1]) as fd:
    for line in fd:
        new_line = line.rstrip()
        if new_line.endswith('#'):
            prefix = new_line
        else:
            new_line = prefix + new_line
        print(new_line)

Тестовый запуск:

$ ./append_word.py input.txt                                       
bbb-ccc-cccc#
bbb-ccc-cccc#   aasdf  asdas asdasa fgdg
bbb-ccc-cccc#   asdfa  asfdas  adfaq  asfa
bbb-ccc-cccc#   afdaf  fafa  fafd  afafa
bbb-ccc-cccc#

Как это работает это просто. Мы читаем файл построчно, удаляя конечные пробелы или символы новой строки с конца. Мы записываем префикс в каждую строку, если эта строка заканчивается символом # . Если строка не заканчивается на # , мы знаем, что эту строку нужно изменить. Наконец, мы печатаем строку независимо от того, была она изменена или нет.

1
09.02.2019, 20:59
2 ответа

Вложите биты $ {...} , но сделайте также подумайте, насколько читабельным будет код для будущих читателей.

() { clean_title=${${1:l}//[^a-zA-Z0-9]/-}; printf "$clean_title" } " BLA "

Также совпадение AZ , вероятно, не имеет большого смысла с учетом более раннего нижнего регистра ...

1
27.01.2020, 23:34

В zshможно вкладывать операторы раскрытия параметров. Вы также можете получить дату с подсказкой%D{%F}(zshтакже имеет strftime, встроенную в модуль zsh/datetime, если вам нужен более подробный и читаемый код ).

filename=${(%):-%D{%F}}-${${1//[^[:alnum:]]/-}:l}
1
27.01.2020, 23:34

Теги

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