我有一个变量var在Bash脚本中持有一个字符串:
echo $var
"some string.rtf"
我想删除这个字符串的最后四个字符,并将结果分配给一个新变量var2,以便
echo $var2
"some string"
我该怎么做呢?
我有一个变量var在Bash脚本中持有一个字符串:
echo $var
"some string.rtf"
我想删除这个字符串的最后四个字符,并将结果分配给一个新变量var2,以便
echo $var2
"some string"
我该怎么做呢?
当前回答
你可以用sed,
sed 's/.\{4\}$//' <<< "$var"
例子:
$ var="some string.rtf"
$ var1=$(sed 's/.\{4\}$//' <<< "$var")
$ echo $var1
some string
其他回答
在这种情况下,您可以使用basename,假设您在要删除的文件上有相同的后缀。
例子:
basename -s .rtf "some string.rtf"
这将返回"some string"
如果你不知道后缀,并希望它删除后面的所有内容,包括最后一个点:
f=file.whateverthisis
basename "${f%.*}"
输出“文件”
%表示切,。你砍的是*是通配符吗
对我有用的是:
echo "hello world" | rev | cut -c5- | rev
# hello w
但我用它来修剪文件中的行,这就是为什么它看起来很尴尬。真正的用途是:
cat somefile | rev | cut -c5- | rev
切割只能让你从某个起始位置开始修剪,如果你需要可变长度的行,这是很糟糕的。因此,这个解决方案反转(rev)字符串,现在我们与它的结束位置相关,然后使用前面提到的cut,并将它反转(再次,rev)回其原始顺序。
通过计算字符串的大小,这为我工作。 很容易,你需要回显你需要返回的值,然后像下面这样存储它
removechars(){
var="some string.rtf"
size=${#var}
echo ${var:0:size-4}
}
removechars
var2=$?
一些字符串
这也可以做到:
... | head -c -1
-c, --bytes=[-]NUM
print the first NUM bytes of each file; with the leading '-', print all but the last NUM bytes of each file
使用变量展开/子字符串替换:
$ {var / %模式/替代} 如果var的后缀匹配Pattern,则用Replacement替换Pattern。
所以你可以这样做:
~$ echo ${var/%????/}
some string
另外,
如果你总是有相同的4个字母
~$ echo ${var/.rtf/}
some string
如果它总是以。xyz结尾:
~$ echo ${var%.*}
some string
你也可以使用字符串的长度:
~$ len=${#var}
~$ echo ${var::len-4}
some string
或者直接返回${var::-4}