Замена в Perl - PullRequest
       13

Замена в Perl

0 голосов
/ 29 января 2019

Так что у меня есть сценарий, в котором у меня есть строки вроде:

TERMS of use    [ER]
SERVICE manager ER Data
Stack OVERFLOW  (ER) check
ERPS Value         ER
GDPER   checks ER

Это строки, в которых вы можете видеть пробел, мульти-пробел или табуляцию между строками.Я хочу заменить «ER» на «GD».

Поэтому я использовал в командной строке:

perl -n -e 's/[[,(]?ER[),]]?/GD/g&&print';

Ввод: GDPER checks ER

Вывод: GDPGD checks GD

Обязательно: GDPER checks GD'

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Другой Perl, использующий позитивный взгляд назад

$ perl -pe 's/(?<=\[|\s|\()ER/GD/g' kanishka.txt
TERMS of use    [GD]
SERVICE manager GD Data
Stack OVERFLOW  (GD) check
ERPS Value         GD
GDPER   checks GD

$

с еще одним краевым регистром, как упомянуто OP в комментариях

$ perl -pe 's/(?<=\[|\s|\(|[a-z])ER/GD/g' kanishka.txt2
TERMS of use    [GD]
SERVICE manager GD Data
Stack OVERFLOW  (GD) check
ERPS Value         GD
GDPER   checks GD
ThisTestCaseDoesNotReplaceGD


$ cat kanishka.txt2
TERMS of use    [ER]
SERVICE manager ER Data
Stack OVERFLOW  (ER) check
ERPS Value         ER
GDPER   checks ER
ThisTestCaseDoesNotReplaceER


$
0 голосов
/ 29 января 2019

Это работает для вас?

ПРИМЕЧАНИЕ: \K требует Perl> = 5.10.0.

$ perl -pe 's/(?:\b|[[:upper:]]*[[:lower:]]+\w*\K)ER\b/GD/g'

Ввод (копирование и вставка)

TERMS of use    [ER]
SERVICE manager ER Data
Stack OVERFLOW  (ER) check
ERPS Value         ER
GDPER   checks ER
ThisTestCaseDoesNotReplaceER

Выход

TERMS of use    [GD]
SERVICE manager GD Data
Stack OVERFLOW  (GD) check
ERPS Value         GD
GDPER   checks GD
ThisTestCaseDoesNotReplaceGD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...