首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grep模式和模式中的模式

Grep模式和模式中的模式
EN

Unix & Linux用户
提问于 2017-04-13 06:28:53
回答 1查看 516关注 0票数 1

原始问题

我有一个jsx文件文件夹,其中包含反应-语法,如下所示:

代码语言:javascript
复制
  ...
  <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>标记的文件。输出应该如下所示:

代码语言:javascript
复制
...
<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' />
...

我知道我可以使用这个命令得到一个合理的结果:

代码语言:javascript
复制
grep -REho '<FormattedMessage .*\/>' my/target/folder/.

我当前的问题

当一些实际结果如下所示时,事情变得复杂起来:

代码语言:javascript
复制
<FormattedMessage id='some.lang.key_1' defaultMessage="Hello {myvar}" values={{ myvar: <FormattedMessage id='some.lang.key_2' defaultMessage='World' /> }} />} />

我想为这种模式制作两行代码:

代码语言:javascript
复制
<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命令魔术来完成这个任务吗?

更新:一个更合理的示例文件:

代码语言:javascript
复制
<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>

期望产出:

代码语言:javascript
复制
<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' />
EN

回答 1

Unix & Linux用户

发布于 2017-04-13 08:15:07

将第一个grep的输出传递给sed

代码语言:javascript
复制
sed -n 'p;s,..*\(<FormattedMessage[^>]*>\).*,\1,p'

输出:

代码语言:javascript
复制
$ 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' />
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/358712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档