...
<div>
<ul>
<li><FormattedMessage id='some.language.key_1' defaultMessage='Some message 1' /></li>
<li><FormattedMessage id='some.language.key_2' defaultMessage='Some message 2' /></li>
<li><FormattedMessage id='some.language.key_3' defaultMessage='Some message 3' /></li>
</ul>
</div>
<div>
<p>Some other contents</p>
</div>
...我想要生成一个包含文件夹中所有<FormattedMessage>标记的文件。输出应该如下所示:
...
<FormattedMessage id='some.language.key_1' defaultMessage='Some message 1' />
<FormattedMessage id='some.language.key_2' defaultMessage='Some message 2' />
<FormattedMessage id='some.language.key_3' defaultMessage='Some message 3' />
...我知道我可以使用这个命令得到一个合理的结果:
grep -REho '<FormattedMessage .*\/>' my/target/folder/.当一些实际结果如下所示时,事情变得复杂起来:
<FormattedMessage id='some.lang.key_1' defaultMessage="Hello {myvar}" values={{ myvar: <FormattedMessage id='some.lang.key_2' defaultMessage='World' /> }} />} />我想为这种模式制作两行代码:
<FormattedMessage id='some.lang.key_1' defaultMessage="Hello {myvar}" values={{ myvar: <FormattedMessage id='some.lang.key_2' defaultMessage='World' /> }} />} />
<FormattedMessage id='some.lang.key_2' defaultMessage='World' />无论如何,我可以用一些Unix命令魔术来完成这个任务吗?
更新:一个更合理的示例文件:
<ul>
<li><FormattedMessage id='lang.key_1' defaultMessage='Message 1' /></li>
<li><FormattedMessage id='lang.key_2' defaultMessage='Message 2' /></li>
<li><FormattedMessage id='lang.key_3' defaultMessage='Message 3' /></li>
<li><FormattedMessage id='lang.key_4' defaultMessage='Message 4' /></li>
<li><FormattedMessage id='lang.key_5' defaultMessage="Message 5 with {inner}" values={{ inner: <Link><FormattedMessage id='lang.key_6' defaultMessage='Message 6' /></Link> }} /></li>
<li><FormattedMessage id='lang.key_7' defaultMessage='Message 7' /></li>
</ul>期望产出:
<FormattedMessage id='lang.key_1' defaultMessage='Message 1' />
<FormattedMessage id='lang.key_2' defaultMessage='Message 2' />
<FormattedMessage id='lang.key_3' defaultMessage='Message 3' />
<FormattedMessage id='lang.key_4' defaultMessage='Message 4' />
<FormattedMessage id='lang.key_5' defaultMessage="Message 5 with {inner}" values={{ inner: <Link><FormattedMessage id='lang.key_6' defaultMessage='Message 6' /></Link> }} />} /></li>
<FormattedMessage id='lang.key_6' defaultMessage='Message 6' />
<FormattedMessage id='lang.key_7' defaultMessage='Message 7' />发布于 2017-04-13 08:15:07
将第一个grep的输出传递给sed:
sed -n 'p;s,..*\(<FormattedMessage[^>]*>\).*,\1,p'输出:
$ grep -REho '<FormattedMessage .*\/>' file | sed -n 'p;s,..*\(<FormattedMessage[^>]*>\).*,\1,p'
<FormattedMessage id='lang.key_1' defaultMessage='Message 1' />
<FormattedMessage id='lang.key_2' defaultMessage='Message 2' />
<FormattedMessage id='lang.key_3' defaultMessage='Message 3' />
<FormattedMessage id='lang.key_4' defaultMessage='Message 4' />
<FormattedMessage id='lang.key_5' defaultMessage="Message 5 with {inner}" values={{ inner: <Link><FormattedMessage id='lang.key_6' defaultMessage='Message 6' /></Link> }} />
<FormattedMessage id='lang.key_6' defaultMessage='Message 6' />
<FormattedMessage id='lang.key_7' defaultMessage='Message 7' />https://unix.stackexchange.com/questions/358712
复制相似问题