我想删除字符串中的最后一个子字节。 字符串的模式是:
str1.str2.strn-1.{i}.strn
,所需的结果是:
str1.str2.strn-1.{i}.
我尝试用shell
echo $str |sed -e 's/\.*$//'
但它不起作用
最好的方法是什么
答案 0 :(得分:3)
-e
开关用于添加编辑命令。您只有1个命令,因此无需使用它。相反,您希望-E
标志告诉sed
使用现代正则表达式。试试这个:
echo $str | sed -E 's/[^.]+$//'
[^.]+$
匹配最后一个点和行尾之间的任何字符。
答案 1 :(得分:1)
使用标准sed的简短解决方案,不使用扩展正则表达式:
sed 's/[^.]*$//'
表示从行尾删除每个非点字符。有几点需要注意:
因此命令说要在行末用尽可能多的非点替换。
答案 2 :(得分:0)
使用tcl
的解决方案regsub -- {[^.]+$} $str {} string
[^.]+$
匹配最后一个'。'附加$ str
答案 3 :(得分:0)
让我们使用字符串 dot -separated的事实。
这是一个纯Tcl解决方案(s
是原始字符串):
set s "[file rootname $s]."
或
set s [file rootname $s]
append s "."
根据file(n)联机帮助页,file rootname
返回
...名称中的所有字符,但不包括名称的最后一个组件中的最后一个“。”字符。如果name的最后一个组件不包含点,则返回name