sed, замените обратную косую черту в #include - PullRequest
2 голосов
/ 22 октября 2011

Я хочу заменить все обратные косые черты (которые появляются на одной строке с директивой включения) косыми чертами.

Вот что у меня есть до сих пор ..

echo '#include "..\etc\filename\yes"' | sed 's&\(#include.*\)\\&\1\/&g'

Это работаеткак я и ожидал, но проблема в том, что он заменяет только один \ за один раз ... Если я хочу заменить все три в приведенном выше тексте, я должен выполнить команду sed 3 раза ... Флаг g в концедолжны сделать замены глобально, нет?

Я использую sed 4.2.1 на Ubuntu 11.10 ...

Ответы [ 2 ]

7 голосов
/ 22 октября 2011

Проблема в том, как вы подходите. .* является жадным, поэтому он сначала совпадает с последним обратным слешем, а затем думает, что это сделано. Попробуйте это:

... | sed '/^#include/s&\\&/&g'

Выполняет подстановки только в строках, соответствующих первому шаблону.

2 голосов
/ 22 октября 2011

Требуется составная команда - первый шаблон соответствует строкам, начинающимся с #include, а второй выполняет перевод косой черты.

sed '/^#include/ s&\\&/&g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...