Как обрезать ввод пользователя в скрипте bash?

Хорошо Мое лучшее предположение - как-то смешивать sed и регулярные выражения, но я не являюсь их экспертом: (

Какие-нибудь идеи?


Я попробовал предложение Муру для более сложного ввода.

заданный ввод: ABCD-0.1.5-6.1.txt

требуемый вывод: ABCD

#!/bin/bash
TRIMMED1="${1%-*}"
TRIMMED2="${1%%-*}"
TRIMMED3="${TRIMMED1%-*}"
TRIMMED4="${TRIMMED1%%-*}"
TRIMMED5="${1%-[0-9]*}"
TRIMMED6="${1%%-[0-9]*}"
echo "user input : $1"
echo "TRIMMED1 : $TRIMMED1"
echo "TRIMMED2 : $TRIMMED2"
echo "TRIMMED3 : $TRIMMED3"
echo "TRIMMED4 : $TRIMMED4"
echo "TRIMMED5 : $TRIMMED5"
echo "TRIMMED6 : $TRIMMED6"

результат:

user input : A-B-C-D-0.1.5-6.1.txt
TRIMMED1 : A-B-C-D-0.1.5
TRIMMED2 : A
TRIMMED3 : A-B-C-D
TRIMMED4 : A
TRIMMED5 : A-B-C-D-0.1.5
TRIMMED6 : A-B-C-D
3
задан 21 June 2016 в 00:01

3 ответа

Вы не должны использовать внешние инструменты для этого. Чистый удар:

FILENAME="${1%-*}"

% используется для удаления самого короткого суффикса соответствия. Если Вы будете иметь file-name-foo, то Вы доберетесь file-name. Для удаления самого длинного суффикса соответствия используйте %%.

Для сохранения к $1 необходимо будет использовать set. Что-то как:

set -- "${1%-*}" "${@:2}"

Затем в следующий раз, когда Вы используете $1, это будет иметь обрезанный текст.

Помнят, никакие пробелы приблизительно = при присвоении переменных.

8
ответ дан 21 June 2016 в 00:01

Можно сделать это

#!/bin/bash
FILENAME=$1
TRIMMED=$(echo "$FILENAME" | cut -f1 -d-)

, команда произведет поле 1 с помощью - как разделитель.

5
ответ дан 21 June 2016 в 00:01

Может быть сделан как это:

#!/bin/bash
# trim text after '-' from user input 'file-name.txt'
FILENAME="$(sed 's/-.*//' <<< $1).txt"

# save 'file' back to $1
mv "$1" "$FILENAME"

Объяснение:

В моем примере я использую sed команда для сокращения имени, которое обычно имеет это расположение 'command/search/replacement/'. В моем примере выше я использую s как команда, которая является поиском и заменой, затем -.* как ищут слово (regex), который будет искать все комбинации, начинающиеся a - затем сопровождаемый случайным символом . и сообщение его это сохраняет до конца с *. Замещающая строка, которую я оставляю пустыми, это означает file-name.txt становится file.

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

Finaly, чтобы заставить строку завершиться я добавляю .txt назад и затем сделайте a mv переименовать файл.

4
ответ дан 21 June 2016 в 00:01

Другие вопросы по тегам:

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