Ответ 1
Вы можете сделать следующее:
#!/bin/bash
v="some string.rtf"
v2=${v::-4}
echo "$v --> $v2"
У меня есть переменная var
в Bash script, содержащая строку, например:
echo $var
"some string.rtf"
Я хочу удалить последние 4 символа этой строки и присвоить результат новой переменной var2
, чтобы
echo $var2
"some string"
Как я могу это сделать?
Вы можете сделать следующее:
#!/bin/bash
v="some string.rtf"
v2=${v::-4}
echo "$v --> $v2"
Чтобы удалить четыре символа из конца строки, используйте ${var%????}
.
Чтобы удалить все после окончательного .
, используйте ${var%.*}
.
Использование Расширение переменной/Подстановка подстановки:
${вар/% шаблон/замена}
Если суффикс var соответствует шаблону, замените Замену для шаблона.
Итак, вы можете сделать:
~$ echo ${var/%????/}
some string
В качестве альтернативы,
Если у вас всегда одинаковые 4 буквы
~$ echo ${var/.rtf/}
some string
Если он всегда заканчивается на .xyz
:
~$ echo ${var%.*}
some string
Вы также можете использовать длину строки:
~$ len=${#var}
~$ echo ${var::len-4}
some string
или просто echo ${var::-4}
Что для меня работало:
echo "hello world" | rev | cut -c5- | rev
# hello w
Но я использовал его для обрезки строк в файле, так что это выглядит неудобно. Реальное использование:
cat somefile | rev | cut -c5- | rev
cut
позволяет получить только ту часть, которая исходит из некоторой исходной позиции, что плохо, если вам нужны строки переменной длины. Таким образом, это решение отменяет (rev
) строку и теперь мы относимся к ее конечной позиции, затем использует cut
, как указано, и отменяет (опять же, rev
), он возвращается к исходному заказу.
Вы можете использовать sed,
sed 's/.\{4\}$//' <<< "$var"
Пример:
$ var="some string.rtf"
$ var1=$(sed 's/.\{4\}$//' <<< "$var")
$ echo $var1
some string
Я попробовал следующее, и это сработало для меня:
#! /bin/bash
var="hello.c"
length=${#var}
endindex=$(expr $length - 4)
echo ${var:0:$endindex}
Выход: hel
Это сработало для меня, рассчитав размер строки.
Вам просто нужно отобразить значение, которое нужно вернуть, и затем сохранить его, как показано ниже
removechars(){
var="some string.rtf"
size=${#var}
echo ${var:0:size-4}
}
removechars
var2=$?
какая-то строка
Надеюсь, что приведенный ниже пример поможет,
echo ${name:0:$((${#name}-10))}
-> ${name:start:len}
start
- начальная точка строкиlen
- длина строки, которая должна быть удалена.Пример:
read -p "Enter:" name
echo ${name:0:$((${#name}-10))}
Выход:
Enter:Siddharth Murugan
Siddhar
Примечание: в Bash 4.2 добавлена поддержка отрицательной подстроки