[英]Using sed to replace variable text in HTML file
我疯狂地尝试遵循sed
BRE(基本正则表达式)规则来替换HTML文件中的一个非常简单的事件。
我认为我正确地遵循了规范 ,但是我的尝试都没有奏效。
我想做的是用一个新的东西替换一个meta标签的内容(我正在计算这是我编写的脚本的一部分)。 基本上,meta标签如下所示:
<meta version="v0.103.2" />
它始终包含一个遵循该语法的属性,在JS正则表达式中,该属性可以表示为:
/version=\\"v[0-9]+\\.[0-9]+\\.[0-9]+\\"/g
因此,我已经尝试了很多sed命令来使其正常工作,除非它引起了我的误解,否则它似乎并没有像所记录的那样工作。 我尝试过的一些命令:
我在Mac上(这很重要,因为Unix / Linux之间
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
救命? 它正在正确查找文件。 当我尝试不包含正则表达式的版本时(请从底部开始查看第三个),它可以正确替换,但是以某种方式我的正则表达式语法似乎在这里不起作用。
还是有人可以想到一种更简单/更可靠的方式来做到这一点?
需要引用的正则表达式和代替+
(即视为文字+
由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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.