Шаблон Grep и шаблон в шаблоне

TAB=`echo 'x' | tr 'x' '\011'`; # tab
SPC=`echo 'x' | tr 'x' '\040'`; # space
s="[$SPC$TAB]";                 # whitespace regex
W="[^|$TAB$SPC]";               # building block of a word
echo ' United  States   | California | UNIX|ABC DE' |
sed -e "s/\($W$W*$s$s*\)\{1,\}[^|][^|]*/\"&\"/g"
1
13.04.2017, 12:04
2 ответа

Передайте вывод из вашего первого 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' />
0
27.01.2020, 23:45

Ваша проблема связана с рекурсивными регулярными выражениями , поскольку шаблон содержится в одном шаблоне несколько раз.

perl -lane '
   $. == 1 and $re = qr{
      (                        # capturing group start
         <FormattedMessage\s   # match tag opening
           (?:
              (?>[^<>])+       # consume as many non-angle brackets as is possible
                |
              (?1)             # otherwise, recurse
                |
              (?>.*?>)         # skip a noninteresting tag
           )*
        />                     # match tag closing
     )                         # capturing group end
  }x;

  next unless /<FormattedMessage\s/;

  while ( my @tags = /$re/g ) {
    print for @tags;
    $_ = join $,, map { s/^<(.*)>$/$1/r } @tags;
  }

' file1

Результат

<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' />
1
27.01.2020, 23:45

Теги

Похожие вопросы