如何在Unix中提取多行单词?

| 我想从以下字符串中提取一些特定的单词:
Exported Layer : missing_hello  
Comment :   
Total Polygons : 20000 (reported 100).  
我想从上面的字符串中提取单词\“ missing_hello \”和\“ 2000 \”,并希望将其显示为
missing_hello : 20000
在UNIX中如何做?     
已邀请:
        假设比missing_hello总是一个字-您可以:
perl -lane \'$el=$F[3] if(/Exported Layer/); print \"$el: $F[3]\" if(/Total Polygons/);\'
    
        看看这个指南-http://www.grymoire.com/Unix/Sed.html Sed当然是值得学习的工具。我将专门查看标题为“使用\\ 1保留模式的一部分”和“使用多行”的部分。     
        如果您有perl,可以使用以下命令:
use strict;
use warnings;

my $layer;
my $polys;

while (<>) {
    if ($_ =~ m{^Exported \\s Layer \\s : \\s (\\S+)}xms) {
        $layer = $1;
        next;
    }
    if ($_ =~ m{^Total \\s Polygons \\s : \\s (\\d+)}xms) {
        $polys = $1;
    }
    if (defined $layer && defined $polys) {
        print \"$layer : $polys\\n\";
        $layer = $polys = undef;
    }
}
    
        在
awk
中:
awk -F: \'/Exported Layer/ { export_layer = $2 }
         /Total Polygons/ { printf(\"%s : %s\\n\", export_layer, $2); }\' \"$@\"
如果输入是垃圾,则输出也将是(GIGO)。如果田地中可以包含冒号,生活将变得更加混乱。 在
sed
中:
sed -n -e \'/Exported Layer : *\\(.*\\)/{s//\\1 : /;h;}\' \\
       -e \'/Total Polygons : *\\(.*\\)/{s//\\1/;x;G;s/\\n//;p;}\' \"$@\"
sed
版本在字段中没有冒号。 现在已在MacOS X 10.6.7上进行了测试。这两个脚本在\'Total Polygons \'行中的数字之后均包含注释。可以很容易地修改这两个脚本,使其仅打印数字而忽略注释。准确定义所有格式的可能性将有所帮助。 我实际上可能会使用Perl(或Python)来完成这项工作;字段拆分只是一团糟,只能从这些语言的更好功能中受益。     

要回复问题请先登录注册