如何在匹配某些子字符串后从perl中的字符串中提取子字符串

时间:2013-07-08 05:10:10

标签: perl substring

我想在Word“设备描述”之后从跟随字符串中提取子字符串,直到符号“]”。子串长度可能不同。 是否有可能提取功能。

UC_CALLMANAGER [Device name abcde][Device IP address 1.1.1.1][Protocol SIP][Device type 550][Device description 9580 - Cordless][Reason Code 13][IPAddressAttributes 0][UNKNOWN_PARAMNAME:LastSignalRecei

4 个答案:

答案 0 :(得分:3)

如果字符串的格式每次都相同但值只会改变,你可以试试这个

cat stck1.txt | awk '{print $12}'

其中stck1.txt包含您的字符串。

我修改了我的命令你也可以试试这个更动态的

cat stck1.txt | sed 's/.*\[Device description //' | awk '{print $1}'

答案 1 :(得分:2)

这有效,但可能不是最佳方式。

my $string = "UC_CALLMANAGER [Device name abcde][Device IP address 1.1.1.1][Protocol SIP][Device type 550][Device description 9580 - Cordless][Reason Code 13][IPAddressAttributes 0][UNKNOWN_PARAMNAME:LastSignalRecei";

my ($substr) = $string =~ /(?<=Device description )([^\]]+)/g;

print $substr;

答案 2 :(得分:1)

perl -lne 'print $1 if(/Device description ([^\]]*)\]/)' your_file

经过测试here。 想把它放在脚本里吗?

$_=~m/Device description ([^\]]*)\]/g;
my $info=$1;
# $info has the required informatio0n now!

答案 3 :(得分:0)

这可能会有所帮助,很少受到影响,并且参考链接示例的试用将为您的目的服务,

#!/usr/bin/perl
  use strict;
  use warnings;

  # Find the location of the substring 'people'

  my $string = 'UC_CALLMANAGER [Device name abcde][Device IP address 1.1.1.1][Protocol SIP][Device type 550][Device description 9580 - Cordless][Reason Code 13][IPAddressAttributes 0][UNKNOWN_PARAMNAME:LastSignalRecei';
  my $fragment =  substr $string, index($string, 'Device description');

  my $limit = substr $fragment index($fragment, ']');

  print "  string: <$string>\n";
  print "fragment: <$fragment>\n";

  print " FINAL OUTPUT : <$limit>\n";
  

输出

     

字符串: UC_CALLMANAGER [设备名称abcde] [设备IP地址   1.1.1.1] [协议SIP] [设备类型550] [设备描述9580 - 无线] [原因代码13] [IPAddressAttributes   0] [UNKNOWN_PARAMNAME:LastSignalRecei

     

片段: 设备说明9580 - 无线] [原因码   13] [IPAddressAttributes 0] [UNKNOWN_PARAMNAME:LastSignalRecei

     

最终输出 :设备说明9580 - 无绳

有关详细信息,请查看:referenced with diff examples