巴什从一个字符串中删除第一个和最后一个字符

我有一个这样的字符串。

|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/'
评论(5)

这里有一个解决方案,它与字符串的长度无关(bash)。

string="|abcdefg|"
echo "${string:1:${#string}-2}"
评论(0)

你也可以用sed来删除|不只是引用符号本身,而是使用位置引用,如:。

$ echo "|abcdefg|" | sed 's:^.\(.*\).$:\1:'
abcdefg

其中':'是分隔符(你可以用/或任何不在查询中的字符来代替它们,s后面的任何符号都可以)这里^(圆点)表示在输入字符串的开头,$(美元)表示在最后。圆点后的.(点)和美元符号前的.(点)代表一个字符。因此,换句话说,我们正在删除第一个和最后一个字符。 请记住,这将删除任何字符,即使它不存在于字符串中。

例如:

$ echo "abcdefg" | sed 's:^.\(.*\).$:\1:'
bcdef
评论(0)