我有一个包含版本号的简单文本文件./version。不幸的是,有时文件中的版本号后跟空格和新行,如
1.1.3[space][space][newline]
[newline]
[newline]
在没有尾随空格和换行符的情况下,将版本号提取到bash变量中的最佳,最简单和最短的方法是什么?我试过了
var=`cat ./version | tr -d ' '`
适用于空格,但在附加tr -d '\n'
时,它不起作用。
谢谢, 克里斯
答案 0 :(得分:2)
$ echo -e "1.1.1 \n\n" > ./version
$ read var < ./version
$ echo -n "$var" | od -a
0000000 1 . 1 . 1
0000005
答案 1 :(得分:2)
Pure Bash,没有其他过程:
echo -e "1.2.3 \n\n" > .version
version=$(<.version)
version=${version// /}
echo "'$version'"
结果:'1.2.3'
答案 2 :(得分:0)
我仍然不知道为什么,但删除并重新创建版本文件后,这有效:
var=`cat ./version | tr -d ' ' | tr -d '\n'`
我很困惑......在创建文本文件时,您可以做些什么。但是,它现在有效。
答案 3 :(得分:0)
我喜欢bash中的纯fgm's answer版本。
我提供了这个单行perl命令来删除其他字符(如果有的话):
perl -pe '($_)=/([0-9]+([.][0-9]+)+)/'
提取的版本号被修剪/剥离(没有换行符或回车符号):
$> V=$( bash --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' )
$> echo "The bash version is '$V'"
The bash version is '4.2.45'
我提供了更多解释,并在perl中提供了其他更复杂(但仍然很短)的单行my other answer命令。