我想要的很简单。给定一个字符串'这是我的测试字符串',我想将子字符串从第二个位置返回到第二个位置。就像是:
substring 'this is my test string' 1,-1
。我知道我可以使用cut从字符串的开头获取东西,但我不确定如何从字符串的末尾轻松计算。帮助
答案 0 :(得分:17)
原来我可以很容易地使用awk执行此操作,如下所示:
echo 'this is my test string' | awk '{ print substr( $0, 2, length($0)-2 ) }'
答案 1 :(得分:3)
在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 :(得分:2)
您只需使用纯bash
$ string="i.am.a.stupid.fool.are.you?"
$ echo ${string: 2:$((${#string}-4))}
am.a.stupid.fool.are.yo
答案 3 :(得分:1)
Look ma,没有全局变量或分叉(显而易见的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}"
}