我们要从以下文件中删除单词--XX:+UseCMSInitiatingOccupancyOnly
more hdfs.conf
SHARED_HADOOP_NAMENODE_OPTS="-server -XX:ParallelGCThreads=8 -XX:+UseCMSInitiatingOccupancyOnly -Xms{{namenode_heapsize}}"
所以我们做了以下工作:
sed -i -E 's/\-XX:\+UseCMSInitiatingOccupancyOnly//g' hdfs.conf
-E启用扩展正则表达式(+和分组需要)。,而我在“-”和“+”之前使用“”
注意--感谢评论关于我的sed语法的评论以及我是否遗漏了什么
我的sed的问题是,当我们删除单词时,我们有一个额外的空格(根据我的sed建议)
我们得到的例子
more hdfs.conf
SHARED_HADOOP_NAMENODE_OPTS="-server -XX:ParallelGCThreads=8 -Xms{{namenode_heapsize}}"
而不是获取没有额外空格的行
more hdfs.conf
SHARED_HADOOP_NAMENODE_OPTS="-server -XX:ParallelGCThreads=8 -Xms{{namenode_heapsize}}"
那么,如何改进sed语法以删除额外的空间呢?
1条答案
按热度按时间oaxa6hgo1#
额外的空格 * 不应该 * 对以后解析这些选项的任何东西都无关紧要,除非它真的写得很糟糕。假设是这种情况,并且额外的空间导致错误...
和往常一样,如果你想在脚本中艾德一个文件,并且你的第一个倾向是转向
sed -i
,我建议使用ed
。与sed
的-i
选项不同,它是标准化的,并且在任何地方的行为都是相同的,这意味着您在不同的环境中运行时不太可能遇到不受欢迎的意外。但是,如果确实需要,您可以调整以下正则表达式以使用sed
:这里的技巧是匹配0个或更多的前后空格,但只在输出中保留两个中的一个(本例中的第一个)。
这也只是尝试在设置您感兴趣的内容的特定变量的行上进行替换,以防您要删除的选项出现在其他地方(例如,在注解中)并且您希望保留该出现。
因为它被标记为perl,一个
perl
版本:(里面的东西
\Q
...\E
按字面意思处理,因此+
不需要转义,\K
基本上会从最终匹配的文本中丢弃在它之前匹配的内容,这意味着您不需要前导空白字符的显式捕获组(\s
匹配的是哪个字符,而不是文字空格)