Mat*_*zzi 122 command-line bash scripts
我有一个这样的字符串:
|abcdefg|
Run Code Online (Sandbox Code Playgroud)
我想以某种方式调用一个新字符串(如 string2),原始字符串|
在开头和结尾没有两个字符,这样我就可以得到这个:
abcdefg
Run Code Online (Sandbox Code Playgroud)
这在bash中可能吗?
Kri*_*per 144
你可以做
string="|abcdefg|"
string2=${string#"|"}
string2=${string2%"|"}
echo $string2
Run Code Online (Sandbox Code Playgroud)
或者如果你的字符串长度是常数,你可以这样做
string="|abcdefg|"
string2=${string:1:7}
echo $string2
Run Code Online (Sandbox Code Playgroud)
此外,这应该工作
echo "|abcdefg|" | cut -d "|" -f 2
Run Code Online (Sandbox Code Playgroud)
还有这个
echo "|abcdefg|" | sed 's/^|\(.*\)|$/\1/'
Run Code Online (Sandbox Code Playgroud)
Sam*_*us_ 75
这是一个独立于字符串(bash)长度的解决方案:
string="|abcdefg|"
echo "${string:1:${#string}-2}"
Run Code Online (Sandbox Code Playgroud)
jlu*_*rad 48
离开这里列出的一些帖子,似乎最简单的方法是:
string="|abcdefg|"
echo ${string:1:-1}
Run Code Online (Sandbox Code Playgroud)
编辑:使用 bash 4.2 在 ubuntu 上工作;在带有 bash 4.1 的 centOS 上不起作用
小智 28
另一种方法是使用head
&tail
命令:
$ echo -n "|abcdefg|" | tail -c +2 | head -c -2
abcdefg
Run Code Online (Sandbox Code Playgroud)
小智 10
您还可以使用 sed 删除 | 不只是引用符号本身,而是使用位置引用,如下所示:
$ echo "|abcdefg|" | sed 's:^.\(.*\).$:\1:'
abcdefg
Run Code Online (Sandbox Code Playgroud)
其中 ':' 是分隔符(您可以用 / 或不在查询中的任何字符替换它们,s 后面的任何符号都可以)这里 ^(插入符号)表示在输入字符串的开头,$(美元)表示在末尾。这 。(点)它在插入符号之后和美元符号之前的那个代表单个字符。所以换句话说,我们正在删除第一个和最后一个字符。请记住,这将删除任何字符,即使 | 它不存在于字符串中。
前任:
$ echo "abcdefg" | sed 's:^.\(.*\).$:\1:'
bcdef
Run Code Online (Sandbox Code Playgroud)