sed: заменить строки, имеющие проблемы из-за специального символа - PullRequest
0 голосов
/ 07 июля 2019

Пожалуйста, предложите оптимальное решение для замены строки ниже в скрипте bash.

input_string= 'cn=xxxxx\, yyyyy (abc-ns),cn=users,dc=box,dc=com'
to_be_replaced_str= 'cn=aaaa\, bbbbb (abc),cn=users,dc=box,dc=com'

sed "s#'${input_str}'#'${replace_str}'#g" 

Но я не получаю никакого результата, и он не меняется с желаемым результатом.

input_string= 'cn=xxxxx\, yyyyy (abc-ns),cn=users,dc=box,dc=com'
to_be_replaced_str= 'cn=aaaa\, bbbbb (abc),cn=users,dc=box,dc=com'

sed "s#'${input_str}'#'${replace_str}'#g" 

input_string= 'cn=xxxxx\, yyyyy (abc-ns),cn=users,dc=box,dc=com'
to_be_replaced_str= 'cn=aaaa\, bbbbb (abc),cn=users,dc=box,dc=com'

sed "s#'${input_str}'#'${replace_str}'#g" 

пустой вывод.

1 Ответ

0 голосов
/ 11 июля 2019

В вашем фрагменте скрипта есть несколько проблем: вы не можете поставить пробелы вокруг = в ассигнмане оболочки, имена переменных, которые вы назначаете, не совпадают с теми, которые вы используете, и обратные слэши в строках не отображаются. Правильно (если они являются частью строки, подлежащей замене, их нужно удвоить, чтобы sed рассматривал их как буквальные обратные слеши, а не как экранированные символы). С этим исправлено, похоже, работает для меня. С этим файлом сценария:

#!/bin/bash

input_string='cn=xxxxx\\, yyyyy (abc-ns),cn=users,dc=box,dc=com'
to_be_replaced_str='cn=aaaa\\, bbbbb (abc),cn=users,dc=box,dc=com'

sed "s#'${input_string}'#'${to_be_replaced_str}'#g" sample.txt

И этот входной файл (sample.txt):

ldap_user = 'cn=xxxxx\, yyyyy (abc-ns),cn=users,dc=box,dc=com'

Он производит такой вывод:

ldap_user = 'cn=aaaa\, bbbbb (abc),cn=users,dc=box,dc=com'

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

p.s. На этот вопрос было бы намного проще и быстрее ответить, если бы вы включили фактический входной файл (или соответствующий раздел) и желаемый результат.

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