3

約2000個のファイルがあり、先頭と末尾に行を追加する必要があります。

各ファイルの先頭に次の行が必要です。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

また、これを各ファイルの最後の行にする必要があります。

</urlset>

これらのファイルはすべて同じフォルダーにあり、すべて.xmlファイルです。

これを行うための最良かつ最速の方法は、コマンドラインまたはperlを使用することだと思いますが、実際にはわかりません。これを行うためのチュートリアルをいくつか見てきましたが、挿入する必要のある行にあるすべての文字は、それを台無しにしているものだと思います。どんな助けでも大歓迎です。ありがとう!

4

4 に答える 4

4

Perlを求めたので...

ファイル全体をメモリにロードするバージョン:

perl -i -0777pe'
   $_ = qq{<?xml version="1.0" encoding="UTF-8"?>\n}
      . qq{<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n}
      . $_
      . qq{</urlset>\n};
' *.xml

一度に1行しか読み取らないバージョン:

perl -i -ne'
   if ($.==1) {
      print qq{<?xml version="1.0" encoding="UTF-8"?>\n},
            qq{<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n};
   }
   print;
   if (eof) {
      print qq{</urlset>\n};
      close(ARGV);
   }
' *.xml

注:はとeof同じではありませんeof()
注:close(ARGV)行番号がリセットされます。

于 2012-11-02T00:49:59.293 に答える
3

Perlの場合、Tie::Fileを使用して簡単に行うことができます。

#!/usr/bin/env perl
use utf8;
use v5.12;
use strict;
use warnings;
use warnings  qw(FATAL utf8);
use open      qw(:std :utf8);

use Tie::File;

for my $arg (@ARGV) {
  # Skip to the next one unless the current $arg is a file.
  next unless -f $arg;

  # Added benefit: No such thing as a file being too big
  tie my @file, 'Tie::File', $arg or die;

  # New first line, will become the second line
  unshift @file, '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

  # The real first line.
  unshift @file, '<?xml version="1.0" encoding="UTF-8"?>';

  # Final line.
  push @file, '</urlset>';

  # All done.
  untie @file;
}

必要なものに保存してから、として実行しますperl whatever_you_named_it path/to/files/*

于 2012-11-02T00:49:50.003 に答える
2

sedの使用:

sed -i -e '1i<?xml version="1.0" encoding="UTF-8"?>\
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' \
-e '$a</urlset>' *.xml
于 2012-11-02T00:31:49.590 に答える
1

でこれを実行してみてください。と単純なのみを使用します。

for file in *.xml; do
    {
        echo '<?xml version="1.0" encoding="UTF-8"?>
            <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
        cat "$file"
        echo "</urlset>"
    } > /tmp/file$$ &&
    mv /tmp/file$$ "$file" 
done
于 2012-11-02T00:18:10.557 に答える