我们试图从文件exampl.txt
中完全删除单词--XX:CMSInitiatingOccupancyFraction=50
(当值50
可以是任何整数值时)
对于这个任务,我们使用了下面的perlone行程序,但是没有成功
perl -pi -e 's/\s*\K\Q-XX:CMSInitiatingOccupancyFraction=(^|\s)d{1,2}\E\s*//' exampl.txt
perl -pi -e 's/\s*\K\Q-XX:CMSInitiatingOccupancyFraction=d{1,2}\E\s*//' exampl.txt
perl -pi -e 's/\s*\K\Q-XX:CMSInitiatingOccupancyFraction=[[:digit:]\E\s*//' exampl.txt
文件示例:
SHARED_HADOOP_DATANODE="-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -Xms{{namenode_heapsize}}"
我的Perl语法有什么问题?
1条答案
按热度按时间dnph8jn41#
在你的尝试中有许多问题。
\Q...\E
转义所有非单词字符,除了在字符串构建阶段处理的字符($
、\E
、\l
、\L
、\u
、\U
和分隔符)。你绝对不想这样。\Q...\E
几乎专门用作\Q$text\E
。d{1,2}
应该是\d{1,2}
。我切换到\S+
,因为没有理由更具体。[[:digit:]
应为[[:digit:]]+
。\d
优于[:digit:]
,得到[\d]+
,其简化为\d+
。^
在这里没有意义。它永远不会匹配,因为它匹配字符串的开头(没有m
修饰符)或行的开头(有m
)。\s*\K
没用。