ОК, вот заданный пользовательский ввод:
$ myscript.sh file-name.txt
Я хотел бы обрезать «file-name.txt» для извлечения «файла» в скрипте bash
#!/bin/bash
FILENAME=$1
# trim text after '-' from user input 'file-name.txt'
# save 'file' back to $1
Мое лучшее предположение - это как-то смешивать sed и регулярное выражение, но я не эксперт в этом: (
Любые идеи?
Я попробовал предложение muru для более сложного ввода.
данный вход: 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"
результат: [!d8 ]
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
Вы можете сделать это с помощью
#!/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), который будет искать все комбинации, начинающиеся с -, а затем случайный символ . и сообщая ему это продолжается до конца с помощью *. Строка замены я оставляю пустой, это означает, что file-name.txt становится file.
<<< является bash конкретным и называется здесь-строкой, поэтому это не работает в sh. Это похоже на перенаправление в файлы только для перенаправления строки в поток вместо файла.
Окончательно, чтобы завершить запись, я добавлю .txt назад, а затем сделаю mv, чтобы переименовать файл.