Как получить подстроку с использованием положительных и отрицательных индексов в Bash - PullRequest
7 голосов
/ 09 сентября 2011

То, что я хочу, довольно просто.Учитывая строку «это моя тестовая строка», я хочу вернуть подстроку из 2-й позиции во 2-ю до последней позиции.Что-то вроде: substring 'this is my test string' 1,-1.Я знаю, что могу получить материал с начала строки, используя cut, но я не уверен, как можно легко вычислить с конца строки.Помощь * * 1002

Ответы [ 4 ]

17 голосов
/ 09 сентября 2011

Оказывается, я могу сделать это с помощью awk довольно легко следующим образом:

echo 'this is my test string' | awk '{ print substr( $0, 2, length($0)-2 ) }'

3 голосов
/ 09 сентября 2011

Будьте чище в awk, python, perl и т. Д., Но вот один из способов сделать это:

#!/usr/bin/bash

msg="this is my test string"
start=2
len=$((${#msg} - ${start} - 2))

echo $len

echo ${msg:2:$len}

результаты в is is my test stri

2 голосов
/ 09 сентября 2011

Вы можете сделать это только с чистым bash

$ string="i.am.a.stupid.fool.are.you?"
$ echo ${string:  2:$((${#string}-4))}
am.a.stupid.fool.are.yo
1 голос
/ 09 сентября 2011

Смотри ма , без глобальных переменных или вилок (кроме явных printf) и тщательно протестировано:

substring()
{
    # Extract substring with positive or negative indexes
    # @param $1: String
    # @param $2: Start (default start of string)
    # @param $3: Length (default until end of string)

    local -i strlen="${#1}"
    local -i start="${2-0}"
    local -i length="${3-${#1}}"

    if [[ "$start" -lt 0 ]]
    then
        let start+=$strlen
    fi

    if [[ "$length" -lt 0 ]]
    then
        let length+=$strlen
        let length-=$start
    fi

    if [[ "$length" -lt 0 ]]
    then
        return
    fi

    printf %s "${1:$start:$length}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...