2009-04-21 9 views
0

ファイルの行5-15のテキストを別のファイルの行6-15のテキストに置き換えたい(例として)。しかし、私は約2000のファイルにこれをしたいと思います、むしろ手動で行う必要はありません。ファイル内の行を変更する

私は何かをperlでスクリプトすることができましたが、私は可能な組み込み関数でそれをやろうとしたいと思います。

答えて

3

私はおそらくsedの

for file in bar baz bam; do 
    newfile=$(mktemp) 
    (sed '5q' $file; sed -n '6,15p' foo; sed '1,15d' $file) > $newfile 
    mv -f $newfile $file 
done 

やPerl

#!/usr/bin/env perl 

use v5.6; # lexical filehandles need Perl >= 5.6 

# usage: $0 foo bar baz bam 
# replaces lines 4-15 of qw(bar baz bam) with lines 6-15 of foo 

my @ins; 

{ 
    open my $fh, shift; 
    while (<$fh>) { 
     push @ins, $_ if 6 .. 15; 
     last if $. >= 15; 
    } 
} 

$^I = ''; 

while (<>) { 
    print if not 5 .. 15; 
    print @ins if $. == 4; 
} 
continue { 
    close ARGV if eof ARGV; 
} 

を使用しますが、あまりにもed働くと思います。

echo '6,15wq foo-part' | ed foo 
for i in bar baz bam; do 
    echo -e '5,15d\n4r foo-part\nwq' | ed $i 
done 
rm -f foo-part 
4
for files in PATTERN ; do 
    sed -n '1,14p' $files > newfile.$files 
    sed -n '6,15p' ANOTHERFILE >> newfile.$files 
    sed -n '15,$p' $files >> newfile.$files 
done 

注:それはeffecientリソースではないですが、私は本当に強力なサーバー;-) 上でそれを書いているし、それを行うには、いくつかの他の方法があります。

+0

ここに行く方法です!このタスクのために設計されています。 –

+0

ファイルは1つ1つ次々と繰り返されるので、 "for files in ..."の代わりに "for file in ..."と書いておくほうがはっきりしていると感じます。 – hlovdal

+0

あなたは文法の観点から正しいです。そして主観的な観点から:私はcVGHJJKAHFDJHSJFO9878932KHJKHJKのような私の変数にも名前をつけることができます。私は後でそれを理解することができます。 –

関連する問題