无法在文件

时间:2018-05-31 17:31:42

标签: regex bash perl

我希望在构建过程中增加文件中的内部版本号。

该脚本的目的是搜索.###'/* 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作为测试用例的原因,看它是否以016018的形式返回。)

1 个答案:

答案 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 */不会被解释为八进制。八进制仅用于源代码中的文字;在数据中,它总是被视为十进制。