Perl或Bash脚本 - 前缀文本文件中的行与文件中较早的文本

时间:2016-08-12 13:37:54

标签: bash perl

我有一个类似的文件:

!Denver

Line 1
Line 2
Line 3

!New York

Line 1 
Line 2

我想要做以下几点 - 基本上用前缀拉文本! (比如!丹佛)并附上文字,少了#34;!"到下一行直到另一行!附带了前进行的新文本

Denver.Line 1
Denver.Line 2
Denver.Line 3
New York.Line 1
New York.Line 2

这是一个更大的剧本的一部分 - 但我希望自己完成其余部分。

我发现以下内容正在审核中:

所以我很快就会得到答案。

谢谢!

5 个答案:

答案 0 :(得分:2)

 perl -ne 'if (s/^!//) { chomp; $p = $_ } elsif (/\S/) { print "$p.$_" }'  < data

答案 1 :(得分:1)

#!/usr/bin/perl
use strict;
use warnings;
my $prefix;
while (<DATA>){ #loop over data line by line
    chomp; #remove \n from line
    next unless $_; #skip empty lines
    if ($_ =~ /^!/){ #check if line starts with !
        $prefix = $_; #store line as prefix
        next; #move to next line
    }
    else{
        print "$prefix.$_\n"; #if line doesn't start with ! then add prefix
    }
}
__DATA__
!Denver

Line 1
Line 2
Line 3

!New York

Line 1 
Line 2

Demo

答案 2 :(得分:1)

<Behaviors>
    <ig:Activation />
    <ig:Selection RowSelectType="Multiple" CellClickAction="Row" />
    <ig:EditingCore>
        <Behaviors>
            <ig:CellEditing Enabled="true" >
                <EditModeActions EnableF2="true" EnableOnActive="true" MouseClick="Single" />
                <ColumnSettings>
                    <ig:EditingColumnSetting ColumnKey="CustomerID" ReadOnly="true" />
                </ColumnSettings>                               
            </ig:CellEditing>
        </Behaviors>
    </ig:EditingCore>
</Behaviors>

答案 3 :(得分:1)

您已经接受了答案,但这也有效:

sed '/^$/d;/^!/{s/^!//;s/$/\./;h;d;};G;s/\(.*\)\n\(.*\)/\2\1/' filename

答案 4 :(得分:0)

也可以使用awk

完成
awk '/^\!/{town=substr($0,2)}!/^$|^\!/{print town "." $0}' file

该镇被!捕获,如果该行不为空,则会显示。