2

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

Также я могу ограничить до 25 символов?

    __FILE_NAME="Test File@#!!.txt"
    echo ${__FILE_NAME// /_}
    $ echo $__FILE_NAME | tr '[:upper:]' '[:lower:]'
    mkdir -p $__PATH${__FILE_NAME};

1 ответ1

2

Используя bash:

f="Test File@#!!.txt"
f="${f// /_}"
f="${f//[^[:alnum:].]/}"
f="${f,,?}"
mkdir -p "$__PATH$f"

Объяснение:

  • f="${f// /_}"

    Это заменяет все пробелы подчеркиванием. Использование двойных кавычек здесь не является обязательным. Однако до тех пор, пока человек не станет опытным во многих особых случаях оболочки, целесообразно помещать их везде, где используется переменная.

  • f="${f//[^[:alnum:].]/}"

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

    Если вы также хотите удалить периоды, замените эту строку на:

    `f="${f//[^[:alnum:]]/}"`
    
  • f="${f,,?}"

    tr - это традиционный инструмент, преобразующий прописные буквы в строчные. Вместо этого в этой строке используется одно из расширений встроенных параметров bash для преобразования.

  • mkdir -p "$__PATH$f"

    Если кто-то не хочет, чтобы оболочка обрабатывала переменные оболочки, безопаснее помещать их в двойные кавычки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .