请提出一种在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"
空白输出。
答案 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。如果您包括了实际的输入文件(或其中的相关部分)和所需的输出,则可以更轻松,更快地回答这个问题。