我正在尝试使用sed在.property文件中查找/替换具有特殊字符的字符串。
这是我在文件中的原始行:
kylin.source.hive.beeline-params=-n root --hiveconf hive.security.authorization.sqlstd.confwhitelist.append='mapreduce.job.*|dfs.*' -u jdbc:hive2://localhost:xxxx我需要替换:
root --hiveconf hive.security.authorization.sqlstd.confwhitelist.append='mapreduce.job.*|dfs.*'使用
hadoop和其他字符串:
localhost使用
ip-00-00-00-000.ec2.internal最终输出需要如下所示:
kylin.source.hive.beeline-params=-n hadoop -u jdbc:hive2://ip-00-00-00-000.ec2.internal:xxxx我使用sed尝试了几种不同的格式:
sudo sed -i 's/root --hiveconf hive\.security\.authorization\.sqlstd\.confwhitelist\.append=\'mapreduce\.job\.\*\|dfs\.\*\'/hadoop' /usr/local/kylin/kylin.propertiessudo sed -i 's/root \-\-hiveconf hive\.security\.authorization\.sqlstd\.confwhitelist\.append\=\'mapreduce\.job\.\*\|dfs\.\*\'/hadoop' /usr/local/kylin/kylin.propertiessudo sed -r 's/root \-\-hiveconf hive\.security\.authorization\.sqlstd\.confwhitelist\.append\=\'mapreduce\.job\.\*\|dfs\.\*\'/hadoop' /usr/local/kylin/kylin.properties当我执行上面的命令时,我没有得到任何输出,它正在等待另一个input.Can有人帮助我解决这个问题吗?
发布于 2020-05-11 07:40:29
这里:
sed -i "s#root.*dfs.*'#hadoop#g; s#localhost#ip-00-00-00-000.ec2.internal#g" /usr/local/kylin/kylin.properties将输出:
kylin.source.hive.beeline-params=-n hadoop -u jdbc:hive2://ip-00-00-00-000.ec2.internal:xxxx或者仅替换文件中的第一个匹配项:
sed -i "0,/root.*dfs/{s#root.*dfs.*'#hadoop#g; s#localhost#ip-00-00-00-000.ec2.internal#g}" /usr/local/kylin/kylin.properties发布于 2020-05-11 21:15:17
当您想要用文字字符串替换文字字符串时,可以使用awk这样的工具来理解文字字符串,而不是使用像sed这样的工具来理解regexp和启用了反向引用的替换,然后您需要以不同的方式小心地转义它们的元字符和分隔符(请参见is-it-possible-to-escape-regex-metacharacters-reliably-with-sed
$ cat tst.awk
BEGIN {
map["root --hiveconf hive.security.authorization.sqlstd.confwhitelist.append='mapreduce.job.*|dfs.*'"] = "hadoop"
map["localhost"] = "ip-00-00-00-000.ec2.internal"
}
{
for (str in map) {
if ( s = index($0,str) ) {
$0 = substr($0,1,s-1) map[str] substr($0,s+length(str))
}
}
print
}
$ awk -f tst.awk file
kylin.source.hive.beeline-params=-n hadoop -u jdbc:hive2://ip-00-00-00-000.ec2.internal:xxxxhttps://stackoverflow.com/questions/61719693
复制相似问题