Исправлено форматирование оператора && с помощью sed - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь написать команду sed, которая добавляет один пробел по обе стороны от оператора && (AND). Вот что у меня есть:

sed -E 's+(\&\&)|(\s*\&\&\s*)+ & +g test.c

Первое условие отсутствия пробелов вокруг && работает, поэтому

if(numberIn==0&&char=='g')

становится

if(numberIn==0 && char=='g')

Но второе условие 1 или более пробелов не работает. Так что

if(numberIn==0  &&   char=='g')

не меняется.

Шаблон \s*OPERATOR\s* работал с другими бинарными операторами, поэтому я не уверен, почему он не работает с оператором and. Я что-то упускаю из-за использования sed в операторе and? С первым условием я заметил, что если вы замените его на «&&», вы получите «&& &&», поэтому заменяющим шаблоном будет «&». (Это не относится к операторам OR или EQUALS).

Любые советы будут оценены.

1 Ответ

1 голос
/ 01 апреля 2020

& в замене sed означает «вставить соответствующую строку».

Используйте \& для вставки буквального амперсанда:

$ echo 'foo   && bar' | sed -E 's+(\&\&)|(\s*\&\&\s*)+ \&\& +g'
foo && bar

PS: получить отформатированный реальный код как clang-формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...