我疯狂地试图遵循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
帮助? 正确查找文件。当我尝试不包含正则表达式的版本时(请参阅底部的第三个),它会正确替换,但不知怎的,我的正则表达式语法似乎不适用于此。
或者,任何人都可以想到更简单/更可靠的方法吗?
答案 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