当前位置: 首页>>技术问答>>正文


Bash删除字符串中的第一个和最后一个字符

, , ,

问题描述

我有一个这样的字符串:

|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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/908.html,未经允许,请勿转载。