使用shell脚本,我试图在文件中搜索一个字符串,然后在变量中返回该值,以便我可以在shell脚本中操作它。
我正在使用dojo构建脚本,此脚本需要为dojo定义版本号。 默认情况下,构建脚本将版本号定义为0.0.0.dev。我想要做的是,在我的原始dojo文件中搜索dojo.version的定义,然后使用该值手动将我编译的构建的版本号设置为该值。
有什么建议吗?
答案 0 :(得分:0)
您可以通过将其作为参数传递给构建脚本来覆盖该版本。
这是使用bat文件的Windows示例
build.bat profileFile=my.profile.js action=release releaseDir=../../../release/
releaseName=rel copyTests=false optimize=comments
cssOptimize=comments version=THE_VERSION_YOU_WANT
我对此question的回答显示了一个覆盖版本的ANT版本。
答案 1 :(得分:0)
因为你标记为shell
,所以生病了bash;这是要查找的关键正则表达式:dojo\.version[\ \t]*=[\ \t]*{
总之;以下是我测试的两个版本的工作框:
# grep -A20 includes comments, excluding these by following
flattenedlines=$(line=$(grep -nRe "dojo\.version[\ \t]*=[\ \t]*{" *); head -n `echo 20+$(echo $line|cut -d ":" -f2)|bc` $(echo $line|cut -d ":" -f1) | tail -n 21| grep -v "\/\/")
echo $flattenedlines | sed "s/'/\"/" | sed 's/.*major[\ \t]*:[\ \t]*\([0-9]*\).*minor[\ \t]*:[\ \t]*\([0-9]*\).*patch[\ \t]*:[\ \t]*\([0-9]*\).*flag[\ \t]*:[^"]*"\([^"]*\).*/\1 - \2 - \3 - \4/'
## result ## :"nMajor - nMinor - nPatch - szFlag"
有两个不同的版本,我个人已经看过..版本1.4.0和1.7.2使用两个不同的文件(我相信这是相当一致的至少从1.2起,1.6个未成年人是转折点)
使用此命令浏览dojo / _base /目录,该命令应该为您提供一个文件和行号,以及找到表达式后的行子集。这是基于使用非压缩sdk 的事实。
dojobase="/var/www/dojotoolkit/dojo"
#command will return similar to following
# for 1.4.2 : "_loader/bootstrap.js:208: dojo.version = {"
# for 1.7.2 : "kernel.js:97: dojo.version = {"
pushd $dojobase/dojo/_base
lines=$(grep -A20 -Re "dojo\.version[\ \t]*=[\ \t]*{" *)
知道,这是要解析的文本
dojo.version = {
// undefined
// number of lines
// with comments
major: 1, minor: 7, patch: 2, flag: "",
revision: rev ? +rev[0] : NaN,
toString: function(){
var v = dojo.version;
return v.major + "." + v.minor + "." + v.patch + v.flag + " (" + v.revision + ")"; // String
}
};
使$lines
缓冲区看起来像这样:
dojo.version = { _loader/bootstrap.js- // summary: _loader/bootstrap.js- // version number of dojo _loader/bootstrap.js- // major: Integer _loader/bootstrap.js- // Major version. If total version is "1.2.0beta1", will be 1 _loader/bootstrap.js- // minor: Integer _loader/bootstrap.js- // Minor version. If total version is "1.2.0beta1", will be 2 _loader/bootstrap.js- // patch: Integer _loader/bootstrap.js- // Patch version. If total version is "1.2.0beta1", will be 0 _loader/bootstrap.js- // flag: String _loader/bootstrap.js- // Descriptor flag. If total version is "1.2.0beta1", will be "beta1" _loader/bootstrap.js- // revision: Number _loader/bootstrap.js- // The SVN rev from which dojo was pulled _loader/bootstrap.js- major: 1, minor: 4, patch: 0, flag: "dev", _loader/bootstrap.js- revision: rev ? +rev[0] : NaN, _loader/bootstrap.js- toString: function(){ _loader/bootstrap.js- with(d.version){ _loader/bootstrap.js- return major + "." + minor + "." + patch + flag + " (" + revision + ")"; // String _loader/bootstrap.js- } _loader/bootstrap.js- } _loader/bootstrap.js- }
使用sed,这是另一行,完成如下:
major=$(echo $lines | sed 's/.*major[\ ]*:[^0-9]*\([0-9]\)*,.*/\1/')
minor=$(echo $lines | sed 's/.*minor[\ ]*:[^0-9]*\([0-9]\)*,.*/\1/')
patch=$(echo $lines | sed 's/.*patch[\ ]*:[^0-9]*\([0-9]\)*,.*/\1/')