Shell script/regex 替换除了中间关键字的句子(重构 Angular 指令)
Shell script/regex to replace sentences except for a keyword in the middle (refactoring Angular directives)
我需要将所有 Angular 翻译指令替换为来自 ngx 的指令。
简而言之,这意味着改变:
<dt i18n="test label@@testLabel">test</dt>
到
<dt [translate]="'testLabel'">test</dt>
请注意标签名称周围的额外 '。
只需 select i18n=" 并将其更改为 [translate]="' 非常简单regex 但是我的代码将无法编译,因为我的标签将缺少 '.
我继续尝试脚本
SomeText2="<dt i18n=\"testLabel@@testLabel\">Test</dt>"
REGEX_REP= echo $SomeText2 | sed 's/i18n="/\[translate\]="/' | sed 's/@@//'| sed s/\"/\'\"/2
但这只会在每个引号前加上一个撇号。
所以我想我正在寻找一个正则表达式,它可以检查它前面某处是否有某个字符串(例如 [translate]),这样我就可以用 替换 " ]'"".
或者,如果其他人有更好的想法,请告诉我!
谢谢
您可以使用
REGEX_REP="$(echo "$SomeText2" | sed 's/i18n="[^"]*@@\([^"]*\)"/[translate]="'"'"''"'"'"/')"
看到online demo,输出是<dt [translate]="'testLabel'">Test</dt>
。
i18n="[^"]*@@\([^"]*\)"
模式匹配 i18n="
子串,然后 [^"]*
匹配除 "
之外的任何 0+ 个字符,@@
匹配 @@
, \([^"]*\)
将 "
以外的任何零个或多个字符捕获到第 1 组中,并且 "
匹配双引号。
替换为[translate]="''"
,即[translate]="'<Group 1 value>'"
。
我需要将所有 Angular 翻译指令替换为来自 ngx 的指令。
简而言之,这意味着改变:
<dt i18n="test label@@testLabel">test</dt>
到
<dt [translate]="'testLabel'">test</dt>
请注意标签名称周围的额外 '。
只需 select i18n=" 并将其更改为 [translate]="' 非常简单regex 但是我的代码将无法编译,因为我的标签将缺少 '.
我继续尝试脚本
SomeText2="<dt i18n=\"testLabel@@testLabel\">Test</dt>"
REGEX_REP= echo $SomeText2 | sed 's/i18n="/\[translate\]="/' | sed 's/@@//'| sed s/\"/\'\"/2
但这只会在每个引号前加上一个撇号。 所以我想我正在寻找一个正则表达式,它可以检查它前面某处是否有某个字符串(例如 [translate]),这样我就可以用 替换 " ]'"".
或者,如果其他人有更好的想法,请告诉我! 谢谢
您可以使用
REGEX_REP="$(echo "$SomeText2" | sed 's/i18n="[^"]*@@\([^"]*\)"/[translate]="'"'"''"'"'"/')"
看到online demo,输出是<dt [translate]="'testLabel'">Test</dt>
。
i18n="[^"]*@@\([^"]*\)"
模式匹配 i18n="
子串,然后 [^"]*
匹配除 "
之外的任何 0+ 个字符,@@
匹配 @@
, \([^"]*\)
将 "
以外的任何零个或多个字符捕获到第 1 组中,并且 "
匹配双引号。
替换为[translate]="''"
,即[translate]="'<Group 1 value>'"
。