Как заменить часть строки с помощью регулярных выражений - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь очистить дамп монго.Я хочу заменить все символы «\» в строках, где после буквенно-цифрового символа следует «\».Это то, что у меня до сих пор
sed -e 's/[a-zA-Z0-9]\\"/ /g' a.txt
Проблема в том, что этот sed заменяет не просто «\», а непосредственно предшествующий ему символ. Поэтому «mystring \» становится «mystrin».Я хотел вывод 'mystring'

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете использовать группу захвата в шаблоне регулярных выражений и заполнитель \1 в замещающей части, который восстановит буквенно-цифровой символ:

sed -e 's/\([a-zA-Z0-9]\)\\"/\1 /g' a.txt
          ^^           ^^    ^^

Вы можете заменить [a-zA-Z0-9] на [[:alnum:]] насделайте регулярное выражение немного более идиоматическим ([:alnum:] соответствует любым буквенно-цифровым символам).

Online sed demo :

s='mystring\"'
sed -e 's/\([a-zA-Z0-9]\)\\"/\1 /g' <<< "$s"
# => mystring
sed -e 's/\([[:alnum:]]\)\\"/\1 /g' <<< "$s"
# => mystring
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...