Каков правильный способ вставки \ u с помощью sed?

Я пытаюсь найти строку, которая содержит \u и добавляет что-то к ней.

Например,

 $ echo \user | sed 's/\us/\\usX/' - 

правильно производит

 \usXer 

Однако, если у меня есть содержимое в файле и введите его в следующий код

 $ sed -i 's/\us/\\usX/' test 

я получил

 \\usXer 

Тогда можно подумать, что проблема заключается в сбежавшей обратной косой чертой, и она не нужна. Но если удалять его, это только вызывает замену \u (в верхнем регистре) команды s sed .

Таким образом, каков правильный способ вставки \u последовательности с помощью sed ?

Прежде всего, sed 's/\us/…/' не ищет \us ; он ищет us . Чтобы выполнить поиск \us , вам нужно использовать sed 's/\\us/…/' .

Если вы ищете строку со специальными символами в ней, а затем добавляете что-то к ней, полезно использовать символ & для ссылки на строку, которую вы искали. Так, например,

 $ sed -i 's/\\us/&X/' test 

В общем случае & (иногда называемое «Find What») представляет ту часть пространства шаблонов, которая соответствует вашей строке поиска. Это более полезно, когда строка поиска является непростым регулярным выражением; например,

 $ echo You say goodbye and I say hello. | sed 's/[gh][az]*[eo]/"&"/g' You say "goodbye" and I say "hello". 

Точно так же, как 's/\\usmthing/…/' – это способ поиска \usmthing , вам нужно использовать 's/…/\\usmthing/' для вставки \usmthing . Например,

  $ echo Boo |  sed 's / oo / \ ulish /'
 BLish ← Обратите внимание, что \ ul интерпретируется как означающий «положить « l » в верхний регистр ».

 $ echo Boo |  sed 's / oo / \\ ulish /'
 B \ ulish