Несмотря на все sed-backslash обсуждения Stackoverflow Я не могу найти рабочего решения для моей конкретной проблемы. Я хочу, чтобы перед определенной строкой в файле была обратная косая черта: something -> \something
.sed: как заменить ст. по обратной косой чертой с последующим ссылкой
sed -i -- 's/\(something\)/\\\1/g' file
Это всегда возвращает строку \1
вместо \something
, потому что по какой-то причине СЕПГ считает, что должен бежать третий обратный слэш. (С моей точки зрения, более логичное) поведение может быть достигнуто путем вставки пробела между \\
и \1
в команде sed, но тогда результат будет \ something
(т. Е. С вставленным пространством в результате), что не то, что я хочу.
Я запускаю эту команду в пакетном файле в Windows, используя sed
от cygwin
(надеюсь, это не имеет значения, поскольку я нацелен на кросс-платформенное решение).
EDIT:/usr/bin/sed версия 4.2.2.
'эхо asdfsomethingasdf | sed 's/\ (something \)/\\\ 1/g'' отлично работает для меня – fancyPants
Я не вижу никаких проблем, ваш образец работает для меня, протестирован с cygwin, а также Ubuntu 16.04. Проверьте команду sed командой 'which sed' и' sed --version'. Ваша проблема встречается только с обычными цитатами 'echo asdfsomethingasdf | sed - "s/\ (something \)/\\\ 1/g" ' – jeb
Используемые теги неоднозначны. Пакетный файл - это dos/windows. В случае, если это изменение среды, одинарные кавычки к двойным. – LotPings