我希望在构建过程中增加文件中的内部版本号。
该脚本的目的是搜索.###'/* BUILD-NUMBER */
,如:
console.log('Version 1.1.017'/* BUILD-NUMBER */);
解析017
,添加一个,然后sprint
。这是我的代码:
perl -pe "s~\.([0-9]+)'/\* BUILD-NUMBER \*/~(sprintf('.%03d%c/* BUILD-NUMBER */', $1, 39))~e" < $U > $T
39
与%c
匹配,以打印撇号'
,因为我无法弄清楚如何将其放入字面。 (它进入了一个bash脚本。)
无论如何,当我运行上述内容时,它会回来:
console.log('Version 1.1.001'/* BUILD-NUMBER */);
所以,我认为它没有得到这个数字。我尝试了$0
,$1
,\g1
等等,但它带回了一些奇怪的东西。没有在任何地方看到17
。
此外,构建号中的前导零会强制perl
将字符串解释为八进制吗? (使用017
作为测试用例的原因,看它是否以016
或018
的形式返回。)
答案 0 :(得分:1)
您的问题是由于您使用dat = data.frame(group= c("A","B","B"),y = c(1,2,3),row = c(1,1,2),LABEL = c("la","la","lb"))
ggplot(dat, aes(x= row, y = y))+geom_point()+facet_wrap(~group)+
scale_x_discrete(
breaks = row,
labels = LABEL
)
but I get an error: Error in check_breaks_labels(breaks, labels) : object 'LABEL' not found
将Perl代码包装在shell中引起的。这将使shell在perl看到它之前将其"..."
变量插入到代码中。
修正:
$1
顺便说一下,这就是你在shell中perl -pe 's~\.([0-9]+)(?='\''/\* BUILD-NUMBER \*/)~sprintf ".%03d", $1 + 1~e'
字符串'
的方式:
'...'
- 结束引用的部分'
- 文字\'
(反斜杠转义)'
- 重新启动引用的部分为了不捕获'
部分,我改变你的正则表达式以使用前瞻,这意味着我不必替换它。
'/* BUILD-NUMBER */
不会被解释为八进制。八进制仅用于源代码中的文字;在数据中,它总是被视为十进制。