我有一个这样的字符串:
|abcdefg|
我想要以某种方式(比如 string2)获取一个新字符串,其中原始字符串的|
开头和结尾不包含两个字符,这样我就可以得到这样的结果:
abcdefg
在 bash 中这可能吗?
答案1
你可以做
string="|abcdefg|"
string2=${string#"|"}
string2=${string2%"|"}
echo $string2
或者如果你的字符串长度是恒定的,你可以这样做
string="|abcdefg|"
string2=${string:1:7}
echo $string2
另外,这应该可行
echo "|abcdefg|" | cut -d "|" -f 2
还有这个
echo "|abcdefg|" | sed 's/^|\(.*\)|$/\1/'
答案2
这是一个与字符串长度无关的解决方案(bash):
string="|abcdefg|"
echo "${string:1:${#string}-2}"
答案3
从这里列出的几篇帖子来看,似乎最简单的方法是:
string="|abcdefg|"
echo ${string:1:-1}
编辑:适用于带有 bash 4.2 的 ubuntu;不适用于带有 bash 4.1 的 centOS
答案4
您还可以使用 sed 删除 |,不仅引用符号本身,而且使用位置引用,如下所示:
$ echo "|abcdefg|" | sed 's:^.\(.*\).$:\1:'
abcdefg
其中 ':' 是分隔符(您可以用 / 或查询中没有的任何字符替换它们,任何跟在 s 后面的符号都可以)这里 ^(插入符号)表示在输入字符串的开头,而 $(美元符号)表示在结尾。插入符号后面的 .(点)和美元符号前面的 .(点)代表单个字符。换句话说,我们删除的是第一个和最后一个字符。请记住,这将删除任何字符,即使字符串中没有 |。
前任:
$ echo "abcdefg" | sed 's:^.\(.*\).$:\1:'
bcdef