Подтвердить что ты не робот

Как удалить последние n символов из строки в Bash?

У меня есть переменная var в Bash script, содержащая строку, например:

echo $var
"some string.rtf"

Я хочу удалить последние 4 символа этой строки и присвоить результат новой переменной var2, чтобы

echo $var2
"some string"

Как я могу это сделать?

4b9b3361

Ответ 1

Вы можете сделать следующее:

#!/bin/bash

v="some string.rtf"

v2=${v::-4}

echo "$v --> $v2"

Ответ 2

Чтобы удалить четыре символа из конца строки, используйте ${var%????}.

Чтобы удалить все после окончательного ., используйте ${var%.*}.

Ответ 3

Использование Расширение переменной/Подстановка подстановки:

${вар/% шаблон/замена}

Если суффикс 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}

Ответ 4

Что для меня работало:

echo "hello world" | rev | cut -c5- | rev
# hello w

Но я использовал его для обрезки строк в файле, так что это выглядит неудобно. Реальное использование:

cat somefile | rev | cut -c5- | rev

cut позволяет получить только ту часть, которая исходит из некоторой исходной позиции, что плохо, если вам нужны строки переменной длины. Таким образом, это решение отменяет (rev) строку и теперь мы относимся к ее конечной позиции, затем использует cut, как указано, и отменяет (опять же, rev), он возвращается к исходному заказу.

Ответ 5

Вы можете использовать sed,

sed 's/.\{4\}$//' <<< "$var"

Пример:

$ var="some string.rtf"
$ var1=$(sed 's/.\{4\}$//' <<< "$var")
$ echo $var1
some string

Ответ 6

Я попробовал следующее, и это сработало для меня:

#! /bin/bash

var="hello.c"
length=${#var}
endindex=$(expr $length - 4)
echo ${var:0:$endindex}

Выход: hel

Ответ 7

Это сработало для меня, рассчитав размер строки.
Вам просто нужно отобразить значение, которое нужно вернуть, и затем сохранить его, как показано ниже

removechars(){
        var="some string.rtf"
        size=${#var}
        echo ${var:0:size-4}  
    }
    removechars
    var2=$?

какая-то строка

Ответ 8

Надеюсь, что приведенный ниже пример поможет,

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 добавлена поддержка отрицательной подстроки