Замена .at () на [] во всем моем коде - PullRequest
1 голос
/ 30 июля 2011

Я пользователь C ++ и получил код, который использует .at() для проверки границ векторов STL.Теперь я хотел бы изменить их на стандартный [].Кто-нибудь знает сценарий, который мог бы сделать это?Это не обязательно должен быть супер общий сценарий - в большинстве случаев это .at(i) или, возможно, .at(a*i+j), - но их слишком много, чтобы сделать их вручную.

Ответы [ 3 ]

6 голосов
/ 30 июля 2011

Используйте этот оператор Perl:

s/\.at\(([^)]+)\)/[$1]/g

Оператор s/// в Perl является «заменой» (поиск / замена).В первом наборе // вы указываете регулярное выражение для сопоставления.Второй // - это текст для замены или замены, который соответствует.

В этом случае я нахожу любой экземпляр ".at (any-but-a-close-paren)" и заменяю егос «[что было в этих пареннах]».

В качестве однострочного:

perl -pe's/\.at\(([^)]+)\)/[$1]/g' in.cpp > out.cpp

Если вы используете Visual Studio , сделайте этов приглашении Найти / Заменить:

Найти что: \.at\({[^)]+}\) Заменить на: \[\1\]

Включить регулярные выражения, и все готово.

1 голос
/ 30 июля 2011
sed -i 's,\.at(\([^\)]*\)),[\1],g' *.h *.cpp

должно работать для большинства простых выражений. Однако, если вы используете скобки внутри параметра для at (), это не будет работать.

grep 'at(.*).*)' *.h *.cpp

помогает вам идентифицировать эти случаи и преобразовать их до запуска указанного сценария sed.

P.S. Держите резервную копию (например, через VCS), если вы позволяете sed работать на месте, как здесь.

РЕДАКТИРОВАТЬ: должен был проверить этот сценарий sed перед публикацией. Исправлено и проверено.

0 голосов
/ 30 июля 2011
sed -e 's/\.at(\([^)]*\))/\[\1]/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...