【发布时间】:2017-12-03 11:09:06
【问题描述】:
我正在疯狂地尝试遵循sed BRE(基本正则表达式)规则来替换 HTML 文件中的一个非常简单的事件。
我认为我正确地关注了the spec,但我的尝试都没有奏效。
我想做的是用新的东西替换一个元标记的内容(我正在计算作为我正在编写的脚本的一部分)。基本上,元标记如下所示:
<meta version="v0.103.2" />
它总是包含一个遵循该语法的属性,在 JS 正则表达式中可以表征为:
/version=\"v[0-9]+\.[0-9]+\.[0-9]+\"/g
所以我已经尝试了一大堆 sed 命令来使其正常工作,但它似乎并没有像记录的那样工作,除非我误解了一些事情。我尝试过的一些命令:
✗ sed -i -E '' s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/ g ./src/index.html ✗ sed -i -E '' s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/ g './src/index.html' ✗ sed -i -E s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/g . /src/index.html ✗ sed -i -E s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\whatever/g ./ src/index.html ✗ sed -i -E s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/g . /src/index.html ✗ sed -i '' s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/g . /src/index.html ✗ sed -i '' s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\whatever/g ./ src/index.html ✗ sed -i '' s/version=\"v[:digit:]+\.[:digit:]+\.[:digit:]+/version=\whatever/g ./src/index.html ✗ sed -i '' s/v[:digit:]+\.[:digit:]+\.[:digit:]+/whatever/g ./src/index.html ✗ sed -i '' s/v[:digit:]+[:punct:][:digit:]+[:punct:][:digit:]+/whatever/g ./src/index.html ✗ sed -i '' s/v[:digit:][:punct:][:digit:][:digit:][:digit:][:punct:][:digit:]+/whatever/g 。 /src/index.html ✗ sed -i '' s/v[:digit:][:punct:][:digit:][:digit:][:digit:][:punct:][:digit:]/whatever/g ./ src/index.html ✗ sed -i '' s/v[0-9]+\.[0-9]+.[0-9]+/whatever/g ./src/index.html ✗ sed -i '' s/version=\"[^ \"]+\"/whatever/g ./src/index.html ✗ sed -i '' s/version="[^ "]+"/whatever/g ./src/index.html ✗ sed -i '' s/version=\"[^\"]+\"/whatever/g ./src/index.html ✗ sed -i '' s/version=/whatever=/g ./src/index.html ✗ sed -i '' s/version=\"/whatever=\'/g ./src/index.html ✗ sed -i '' s/version=\"[^\"]/whatever=\"/g ./src/index.html我在 Mac 上(这很重要,因为
sedsyntax changes between Unix/Linux),这说明了以下命令中的''。
帮助? 正在正确地找到文件。当我尝试不包含正则表达式的版本时(请参见底部第三个),它会正确替换,但不知何故我的正则表达式语法似乎在这里不起作用。
或者谁能想到更简单/更可靠的方法来做到这一点?
【问题讨论】:
-
试试
sed -i '' "s/version=\"v[0-9]*\.[0-9]*\.[0-9]*\"/whatever=/g" ./src/index.html -
@WiktorStribiżew -- 成功了!想要让它成为答案,以便我可以选择它?