.
)。如果version='2.3.3'
,所需的输出是233
。我尝试如下,但是它要求
.
被替换为另一个字符2_3_3
。如果tr . ''
可以工作,那就很好。 1 VERSION='2.3.3'
2 echo "2.3.3" | tr . _
#1 楼
无需执行外部程序。bash
的字符串操作可以处理它(也可以在ksh93
(从何处获得),zsh
和mksh
的最新版本,yash
和busybox sh
(至少)):$ VERSION='2.3.3'
$ echo "${VERSION//.}"
233
(在那些shell的手册中,通常可以在参数扩展部分中找到它。)
评论
更详细的说,上述答案的语法是$ {string // substring / replacement},其中显然缺少最后的正斜杠和替换字符串被解释为delete。看这里。
– sherrellbc
16年1月6日在18:19
是的,man bash在Shell Parameter Expansion部分中明确指出:“ $ {parameter / pattern / string}(...)如果string为null,则删除模式匹配项,并且/后面的模式可以省略。”
–manatwork
16年1月6日在18:49
我的问题是版本号像这样的“ 1.0.0”,而我只想要该数字,因此请遵循@manatwork建议的更改:“ $ {VERSIONNUM //'”'}“”,但是我什至插入'',因为否则它不会识别出像字符串一样的“”起飞。
–́Alexiscanny
16/09/14在12:53
@Alexiscanny,您的意思是值中存在文字“?这恐怕算作新问题了,但请尝试转义使用双引号:“ $ {VERSIONNUM // \”}“ pastebin.com/3ECDtkwH
–manatwork
16-09-14在13:03
高超!!也可以在-ash上运行!
–Fr0zenFyr
17年1月4日在11:33
#2 楼
按时间顺序:tr / sed
echo "$VERSION" | tr -d .
echo "$VERSION" | sed 's/\.//g'
csh / tcsh
echo $VERSION:as/.//
POSIX外壳:
set -f
IFS=.
set -- $VERSION
IFS=
echo "$*"
ksh93 / zsh / mksh / bash / yash(和
ash
配合使用busybox ASH_BASH_COMPAT
) br /> zsh
echo "${VERSION//.}"
评论
tr -d甚至删除了集合中的单个字符。对于Ex,我想从“ DCC_VersionD”中删除DCC_,它将删除DCC和D。预期输出:VersionD。实际输出:版本。 sed的魅力十足。 :)感谢您的帖子。
–凯尔
18年5月21日在11:30
#3 楼
除了成功的答案之外,已经存在。使用tr
和--delete
选项也可以实现相同的效果。评论
在macOS上,无法识别--delete标志,但可以使用-d代替
–熵
18年4月5日在17:40
#4 楼
您应该改用sed
sed 's/\.//g'
#5 楼
echo "$VERSION" | tr -cd [:digit:]
不管是否存在其他字符,都将仅返回数字
评论
仅在当前目录中没有名为:,d,i,g或t的文件并且您使用的shell不会抱怨不匹配的glob并留下它们(大多数为Bourne类和rc类)或不支持水珠的贝壳(如鱼)。
–StéphaneChazelas
20-05-29在15:17
#6 楼
Perl$ VERSION='2.3.3'
$ perl -pe 's/\.//g' <<< "$VERSION"
233
Python
$ VERSION='2.3.3'
$ python -c 'import sys;print sys.argv[1].replace(".","")' "$VERSION"
233
如果
$VERSION
仅包含数字和点,我们可以做的更短:$ python -c 'print "'$VERSION'".replace(".","")'
233
(请注意,这是一个代码注入漏洞,尽管
$VERSION
可能包含任何字符)。AWK
$ VERSION='2.3.3'
$ awk 'BEGIN{gsub(/\./,"",ARGV[1]);print ARGV[1]}' "$VERSION"
233
或者这个:
$ awk '{gsub(/\./,"")}1' <<< "$VERSION"
233
评论
不,它不需要:echo“ 2.3.3” | tr -d ..@manatwork很好,有效。您可以将其发布为答案。谢谢
很多好的答案。但是,如果我可以对目标进行第二次猜测,请注意2.11.3和2.1.13 ... ;-)考虑在数字上添加填充零。
@Rmano您的意思是类似VERSION ='2.30.3100'吗?无论是什么,都将在此处将所有答案删除。
@PrayagUpd ---我只是说,如果您将转换后的数字用于比较(比如说“此版本是更新的还是相同的”),则应注意2.11.3和2.1.13- -去除点后它们看起来相同,但是显然2.11.3是更新的。同样,2.11.3比2.1.14更新,但是比较2113和2114将导致错误的答案。我记得某个地方有个错误...