使用sed替换HTML文件中的变量文本

时间:2017-06-29 16:18:48

标签: regex bash sed

我疯狂地试图遵循sed BRE(基本正则表达式)规则来替换HTML文件中非常简单的事件。

我想我正确地关注the spec,但我的尝试都没有奏效。

我想做的是用一些新东西替换一个元标记的内容(我正在计算作为我正在编写的脚本的一部分)。基本上,元标记看起来像这样:

<meta version="v0.103.2" />

它总是包含一个遵循该语法的属性,在JS正则表达式中可以表示为:

/version=\"v[0-9]+\.[0-9]+\.[0-9]+\"/g

所以我尝试了一大堆sed命令来实现这个功能,它似乎没有记录,除非我误解了一些事情。我试过的一些命令:

  

我在Mac上(由于sed syntax changes between Unix/Linux而重要),这说明了以下命令中的''

✗ 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

帮助? 正确查找文件。当我尝试不包含正则表达式的版本时(请参阅底部的第三个),它会正确替换,但不知怎的,我的正则表达式语法似乎不适用于此。

或者,任何人都可以想到更简单/更可靠的方法吗?

1 个答案:

答案 0 :(得分:2)

您需要引用正则表达式而不是+(由BRE POSIX视为文字+)使用*(匹配 0 多次出现)或\{1,\}范围量词(在BRE POSIX中,{n,m}必须写为\{m,n\})匹配1次或多次出现。

因此,您可以使用

sed -i '' "s/version=\"v[0-9]*\.[0-9]*\.[0-9]*\"/whatever=/g" ./src/index.html

单引号:

sed -i '' 's/version="v[0-9]*\.[0-9]*\.[0-9]*"/whatever=/g' ./src/index.html