我正在尝试使用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.properties
sudo sed -i 's/root \-\-hiveconf hive\.security\.authorization\.sqlstd\.confwhitelist\.append\=\'mapreduce\.job\.\*\|dfs\.\*\'/hadoop' /usr/local/kylin/kylin.properties
sudo sed -r 's/root \-\-hiveconf hive\.security\.authorization\.sqlstd\.confwhitelist\.append\=\'mapreduce\.job\.\*\|dfs\.\*\'/hadoop' /usr/local/kylin/kylin.properties
当我执行上述命令时,我没有得到任何输出,它正在等待另一个输入。有人能帮我解决这个问题吗?
2条答案
按热度按时间uz75evzq1#
在这里:
将输出:
或仅替换文件中的第一个匹配项:
drkbr07n2#
当您想用文字字符串替换文字字符串时,请使用类似awk的工具来理解文字字符串,不是像sed这样的工具,它只理解regexp和支持反向引用的替换,然后您需要以不同的方式小心地转义的元字符和分隔符(请参阅sed是否可以可靠地转义regex元字符: