我正在寻找一种从多个括号中提取特定文本并希望存储在文件中的方法。内容看起来像这样。
{& Vendor CGIO} 1100 650} {{& IP_OWNER cjohn} 1100 550} {{& Product pk_sgmii_serdes_sx_ico_idac_sw_by2} 1100 450} {{& DATE_TIME Aug 29 03:27:36 2016} 1100 750} {{& Version 1.1} 1100 350} {{& PDK_RELEASE_VERSION V1} 1100 850}
我想提取以下内容并将其打印到文件中。
& Vendor CGIO
& IP_OWNER cjohn
& Product pk_sgmii_serdes_sx_ico_idac_sw_by2
& Version 1.1
我尝试使用cut命令,但提取所有变量并不是那么有用。
cat Tags_file | cut -d '{' -f2 | cut -d '}' -f1
答案 0 :(得分:3)
将grep -oP '(?<={)[^{}]+(?=})' file
& Vendor CGIO
& IP_OWNER cjohn
& Product pk_sgmii_serdes_sx_ico_idac_sw_by2
& DATE_TIME Aug 29 03:27:36 2016
& Version 1.1
& PDK_RELEASE_VERSION V1
与基于外观的正则表达式一起使用:
#wrapper{
display: flex;
justify-content: space-between;
border: 2px dotted red;
padding: 20px;
}
#wrapper div{
width: 48%;
border: 2px dotted purple;
}
答案 1 :(得分:1)
也许while
循环也会打印输出:
my $str = '{& Vendor CGIO} 1100 650} {{& IP_OWNER cjohn} 1100 550} {{& Product pk_sgmii_serdes_sx_ico_idac_sw_by2} 1100 450} {{& DATE_TIME Aug 29 03:27:36 2016} 1100 750} {{& Version 1.1} 1100 350} {{& PDK_RELEASE_VERSION V1} 1100 850}';
print "$1\n" while($str=~m/\{([^\{\}]*)\}/g);
答案 2 :(得分:1)
尝试
grep -Poh '(?<={)& (?!DATE|PDK)[^}]+' Tags_file
我得到了什么:
& Vendor CGIO
& IP_OWNER cjohn
& Product pk_sgmii_serdes_sx_ico_idac_sw_by2
& Version 1.1
正是您所需要的。 (在您的示例中排除了DATE_TIME
和PDK
)
答案 3 :(得分:1)
首先,将所有{&
更改为newlines,
然后删除剩余的噪音(请注意我也删除了初始&
):
$ echo "{& Vendor CGIO} 1100 650} {{& IP_OWNER cjohn} 1100 550} {{& Product pk_sgmii_serdes_sx_ico_idac_sw_by2} 1100 450} {{& DATE_TIME Aug 29 03:27:36 2016} 1100 750} {{& Version 1.1} 1100 350} {{& PDK_RELEASE_VERSION V1} 1100 850}"
| sed 's/{&/\n/g' | awk -F\} '{ print $1 }'
Vendor CGIO
IP_OWNER cjohn
Product pk_sgmii_serdes_sx_ico_idac_sw_by2
DATE_TIME Aug 29 03:27:36 2016
Version 1.1
PDK_RELEASE_VERSION V1