Какие-нибудь идеи?
Я попробовал предложение Муру для более сложного ввода.
заданный ввод: 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
Вы не должны использовать внешние инструменты для этого. Чистый удар:
FILENAME="${1%-*}"
%
используется для удаления самого короткого суффикса соответствия. Если Вы будете иметь file-name-foo
, то Вы доберетесь file-name
. Для удаления самого длинного суффикса соответствия используйте %%
.
Для сохранения к $1
необходимо будет использовать set
. Что-то как:
set -- "${1%-*}" "${@:2}"
Затем в следующий раз, когда Вы используете $1
, это будет иметь обрезанный текст.
Помнят, никакие пробелы приблизительно =
при присвоении переменных.
Можно сделать это
#!/bin/bash
FILENAME=$1
TRIMMED=$(echo "$FILENAME" | cut -f1 -d-)
, команда произведет поле 1 с помощью -
как разделитель.
Может быть сделан как это:
#!/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
переименовать файл.