Unix 中的字符串替换

String replace in unix

我要删除数字后的一些文字,例如:1.2.0_testing。我只想要 1.2.0 的数字部分。所以下划线之后的任何内容都需要删除。 下面是我使用的代码:

echo $str | sed 's/_*//'

但是通配符似乎不起作用,我仍然得到完整的字符串。谁能帮帮我。

谢谢!

试试这个,

echo $str | sed 's/_.*//'

. - 匹配任何单个字符。

* - 匹配前一个字符的零次或多次出现

因此,_.* 表示 _.

之后的 0 个或多个字符

无需昂贵的 fork 即可运行 sed、awk 或 - 喘息! - 珀尔。 shell 可以很好地做到这一点:

$ str=1.2.0_testing
$ echo ${str%%_*}     # Remove longest part from the right matching _*
1.2.0

在精美的 shell 手册中了解有关使用 %、%%、#、## 进行内置字符串操作的所有信息。这些从右侧(百分比)或左侧(散列)中删除最短(单)或最长(双)匹配。