2011-12-12 25 views
-2

之間的新行我想插入線beetwen 2號線和3號線包含來自該行插入兩行用Perl

字符串連接
abc 
abcd: 
abc 
abcd 

輸出:

abc 
abcd: 
abcd: abcd 
abc 
abcd 
+1

-1,因爲這是一個「食譜」的問題在oneliner – Nikodemus

回答

1

您要添加的東西在以冒號結尾的行之後,或者在第2行之後?

如果在第2行之後,您可以split("\n", $string)獲取一行數組,將新行拼接到位置2的數組中,然後join("\n", @array)將字符串取回。

如果以冒號結尾的行後面,可以使用正則表達式:s/(:\n)/\1YOUR_NEW_LINE_HERE\n/

+0

我想以冒號結束的行後添加一些容易解決的文件。謝謝 –

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

在當前行之後插入一行很簡單,只需將該文本附加到當前行並輸出即可。

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

測試是有問題

+0

運行那個單行程序,我在-e行1附近得到錯誤'語法錯誤「(ne」 在-e行1附近的語法錯誤「;}」' – mrk