如何从Bash中的string中删除最后n个字符?
我有一个variablesvar
在Bash脚本中持有一个string,如:
echo $var "some string.rtf"
我想删除这个string的最后4个字符,并将结果赋给一个新的variablesvar2
,这样
echo $var2 "some string"
我怎样才能做到这一点?
你可以这样做:
#!/bin/bash v="some string.rtf" v2=${v::-4} echo "$v --> $v2"
要从string末尾移除四个字符,请使用${var%????}
。
在决赛后删除所有内容.
使用${var%.*}
。
使用可变扩展/子串replace :
$ {VAR /%图案/换货}
如果var的后缀匹配Pattern,则将replacereplace为Pattern。
所以你可以这样做:
~$ echo ${var/%????/} some string
或者,
如果你总是有相同的4个字母
~$ echo ${var/.rtf/} some string
如果它总是以.xyz
结尾:
~$ echo ${var%.*} some string
你也可以使用string的长度:
~$ len=${#var} ~$ echo ${var::len-4} some string
或简单地echo ${var::-4}
你可以使用sed,
sed 's/.\{4\}$//' <<< "$var"
例:
$ var="some string.rtf" $ var1=$(sed 's/.\{4\}$//' <<< "$var") $ echo $var1 some string
对我有效的是:
echo "hello world" | rev | cut -c5- | rev # hello w
但是我用它来修剪文件中的行,这就是为什么它看起来很尴尬。 真正的用途是:
cat somefile | rev | cut -c5- | rev
cut
只会让你从一些起始位置进行修剪,如果你需要长度可变的行,这是不好的。 所以这个解决scheme把string反转(现在),现在我们把它和它的结束位置联系起来,然后使用上面提到的cut
,并且把它再次转换回原来的顺序。