问题描述
我有一个这样的字符串:
|abcdefg|
我想要得到一个新的字符串(如string2)与原始字符串调用没有两个|在开始和结束时
所以我会有这个
abcdefg
在bash中可能吗?
最佳解决方法
你可以做
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/'
次佳解决方法
这是一个独立于字符串长度(bash)的解决方案:
string="|abcdefg|"
echo "${string:1:${#string}-2}"
第三种解决方法
在这里列出的几个帖子看起来最简单的方法是:
string="|abcdefg|"
echo ${string:1:-1}
编辑:工程与bash 4.2 Ubuntu的;不能用bash 4.1在centOS上工作
第四种方法
另一个:
string="|abcdefg|"
echo "${string//|/}"
第五种方法
另一种方式与头&尾巴:
$ echo -n "|abcdefg|" | tail -c +2 | head -c -1
abcdefg
第六种方法
您也可以使用sed删除|不只是引用符号本身,而是使用位置引用,如下所示:
$ echo "|abcdefg|" | sed 's:^.\(.*\).$:\1:'
abcdefg
如果’:’是分隔符(你可以用/或者不是在查询中的任何字符替换它们,任何跟在s后面的符号都会这样做)这里^(caret)表示输入字符串的开头,$(dollar)表示在结束。这个。 (点)它在插入符号之后,并且在美元符号代表单个字符之前。换句话说,我们正在删除第一个和最后一个字符。请记住,即使|也会删除任何字符它不存在于字符串中。
EX:
$ echo "abcdefg" | sed 's:^.\(.*\).$:\1:'
bcdef