Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在论文之间读取提取数据并将其打印到另一个文件_Regex_Bash_Perl_Awk_Sed - Fatal编程技术网

Regex 如何在论文之间读取提取数据并将其打印到另一个文件

Regex 如何在论文之间读取提取数据并将其打印到另一个文件,regex,bash,perl,awk,sed,Regex,Bash,Perl,Awk,Sed,我正在寻找一种从多个括号中提取特定文本并希望存储在文件中的方法。内容如下所示 {& 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} {{&a

我正在寻找一种从多个括号中提取特定文本并希望存储在文件中的方法。内容如下所示

{& 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

使用
grep-oP
和基于lookaround的正则表达式:

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

grep-oP'(?使用
grep-oP
和基于lookaround的正则表达式:

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

grep-oP'(?可能
循环也将打印输出:

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);

可能
while
loop也会打印输出:

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);
试一试

正是您需要的。(如您的示例所示,排除了
DATE\u TIME
PDK

试试看

正是您需要的。(如您的示例所示,排除了
DATE\u TIME
PDK


首先,将所有
{&
更改为
换行符,
然后去除剩余的噪声(请注意,我还删除了开头的
&
):


首先,将所有
{&
更改为
换行符,
,然后去除剩余的噪声(注意,我还删除了初始的
&
):

$ 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