【问题标题】:findstr in perl with escaping double quotes from pipingperl中的findstr,从管道中转义双引号
【发布时间】:2013-09-19 05:00:17
【问题描述】:

我正在尝试使用 findstr,它的输入来自带有引号的管道输出,并且命令放置在 perl 脚本中。我无法匹配双引号。例如:我的 out of java 命令类似于:

<violation beginline="30" endline="171" begincolumn="8" endcolumn="1" rule="something" ruleset="AllRules" package="com.mypackage priority="3">
<violation beginline="30" endline="171" begincolumn="8" endcolumn="1" rule="something" ruleset="AllRules" package="com.mypackage priority="5">

    our $currentViolationCount=`java Myclass | FINDSTR -i "priority=\"3\""`

我尝试使用 FINDSTR -i ^"priority=\"3\"^" 和 FINDSTR -i ^"priority=\^"3\^"^",但它不匹配任何行

【问题讨论】:

  • ^ 表示一行的开头。
  • @devnull:在 Windows 世界中,^ 是一个 shell 转义字符。
  • 也许避免 FINDSTR 并在 perl 中进行字符串搜索更容易(而且更便携!)。

标签: perl findstr


【解决方案1】:

使用 Perl 处理输出。不要忘记错误检查!

our $currentViolationCount=`java Myclass`;
if ($?){die "java Myclass is died, error: $!";}
my ($priority)=$currentViolationCount=~m!priority="\d+"!gis;
print "Found priority: $priority\r\n";

【讨论】:

    【解决方案2】:

    或作为 cmdline oneliner:

    java Myclass|perl -wnpi -e 's/.*priority="(\d+)".*/$1/g
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2011-06-26
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多