【发布时间】:2020-08-26 09:40:42
【问题描述】:
我正在尝试使用 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
当我执行上述命令时,我没有得到任何输出,它正在等待另一个输入。有人可以帮我解决这个问题吗?
【问题讨论】:
-
我看到的一个问题是你逃避太多(不是太少,你似乎担心)。除了字符类之外,连字符不是元字符。在基本的正则表达式(这是
sed使用的,除非你使用-E或-r标志)不支持交替,所以管道字符应该 not 被转义。您不能只是随机尝试并希望获得好运;您需要选择一个文档源并查阅它以确切了解哪些需要转义,哪些不需要转义。