sed:替换因特殊字符而出现问题的字符串

时间:2019-07-07 00:32:37

标签: bash sed

请提出一种在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 :(得分:0)

您的脚本片段中有几个问题:您不能在外壳程序的=周围放置空格,您分配的变量名与您使用的变量名不匹配,并且字符串中的反斜杠是不正确的(如果它们是要替换的字符串的一部分,则需要将它们加倍,因此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命令中删除(但不要在变量分配周围,这是Shell语法的一部分)。

p.s。如果您包括了实际的输入文件(或其中的相关部分)和所需的输出,则可以更轻松,更快地回答这个问题。