pra*_*upd 173 bash text-processing
我想解析一个变量(在我的例子中它是开发工具包版本)以使其 dot( .) 免费。如果version='2.3.3',所需的输出是233。
我尝试如下,但它需要.替换为另一个给我的字符2_3_3。如果tr . ''能奏效就好了。
1 VERSION='2.3.3'
2 echo "2.3.3" | tr . _
Run Code Online (Sandbox Code Playgroud)
man*_*ork 189
无需执行外部程序。bash的字符串操作可以处理它(也可以在ksh93(它来自何处)zsh以及mksh,yash和 busybox 的最新版本sh(至少)中可用):
$ VERSION='2.3.3'
$ echo "${VERSION//.}"
233
Run Code Online (Sandbox Code Playgroud)
(在这些 shell 的手册中,您通常可以在参数扩展部分找到它。)
Sté*_*las 123
按时间顺序:
echo "$VERSION" | tr -d .
echo "$VERSION" | sed 's/\.//g'
Run Code Online (Sandbox Code Playgroud)
echo $VERSION:as/.//
Run Code Online (Sandbox Code Playgroud)
set -f
IFS=.
set -- $VERSION
IFS=
echo "$*"
Run Code Online (Sandbox Code Playgroud)
ash用 构建时的busybox ASH_BASH_COMPAT)echo "${VERSION//.}"
Run Code Online (Sandbox Code Playgroud)
echo $VERSION:gs/./
Run Code Online (Sandbox Code Playgroud)
小智 28
除了已经存在的成功答案。使用tr,--delete选项可以实现相同的目的。
echo "2.3.3" | tr --delete .
echo "2.3.3" | tr -d . # for MacOS
Run Code Online (Sandbox Code Playgroud)
这将输出: 233
$ VERSION='2.3.3'
$ perl -pe 's/\.//g' <<< "$VERSION"
233
Run Code Online (Sandbox Code Playgroud)
$ VERSION='2.3.3'
$ python -c 'import sys;print sys.argv[1].replace(".","")' "$VERSION"
233
Run Code Online (Sandbox Code Playgroud)
如果$VERSION只包含数字和点,我们可以做更短的事情:
$ python -c 'print "'$VERSION'".replace(".","")'
233
Run Code Online (Sandbox Code Playgroud)
(请注意,这是一个代码注入漏洞,尽管 if$VERSION可能包含任何字符)。
$ VERSION='2.3.3'
$ awk 'BEGIN{gsub(/\./,"",ARGV[1]);print ARGV[1]}' "$VERSION"
233
Run Code Online (Sandbox Code Playgroud)
或这个:
$ awk '{gsub(/\./,"")}1' <<< "$VERSION"
233
Run Code Online (Sandbox Code Playgroud)