繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM