我想在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
答案 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