regex perl one liners + replace complex string with key with any integer value

qvtsj1bj  于 2023-05-30  发布在  Perl
关注(0)|答案(1)|浏览(146)

我们试图从文件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语法有什么问题?

dnph8jn4

dnph8jn41#

perl -i -pe's/-XX:CMSInitiatingOccupancyFraction=\S+\s*//' exampl.txt

在你的尝试中有许多问题。

  • \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没用。

相关问题