-2

この行からの連結文字列を含む行 2 と行 3 の間に行を挿入したい

abc
abcd:
abc
abcd

出力:

abc
abcd:
abcd: abcd
abc
abcd
4

3 に答える 3

1
perl -p -i.bck -e "if ($last ne ''){ $_=~s/.*/$last $&\\n$&/; $last=''} elsif (/:/) {$last = $_;chomp($last);} else {$last = '';}" test

test は問題のファイルです

于 2011-12-12T13:45:19.867 に答える
1

コロンで終わる行の後、または 2 行目の後に何かを追加しますか?

行 2 の後、行split("\n", $string)の配列を取得し、新しい行を位置 2 の配列にスプライスしてjoin("\n", @array)から、文字列を取得することができます。

コロンで終わる行の後にある場合は、正規表現を使用できます: s/(:\n)/\1YOUR_NEW_LINE_HERE\n/.

于 2011-12-12T08:52:53.647 に答える
1

コロンで終わる各行の後に何を置きたいかを指定しないので、一般的な意思決定とやや柔軟な処理を表す表を作成しました。

# create a table
my %insert_after 
    = ( abcd => "abcd: abcd\n"
      , defg => "defg: hijk\n"
      );

# create a list of keys longest first, and then lexicographic 
my $regs  
    = '^(' 
    . join( '|', sort { length $b <=> length $a or $a cmp $b } 
                 keys %insert_after 
          )
    . '):$'
    ;
my $regex = qr/$regs/;

# process lines.
while ( <> ) { 
    m/$regex/ and $_ .= $insert_after{ $1 } // '';
    print;
}

現在の行の後に行を「挿入」することは、そのテキストを現在の行に追加して出力するのと同じくらい簡単です。

于 2011-12-12T12:55:48.607 に答える