0

私は法医学の学習を行っており、.xsl ファイル全体を含む .str ファイルを取得しています。

xsl ファイルの内容

.str ファイルからすべての .xsl ファイルを抽出する必要があります。私は次のようなものを使用しました:

cat pc1.str | grep "<From>" > talk.txt

問題は、ほとんどすべてのテキストを取得できますが、読み取り可能な形式ではないことです。私は内側から持っているものだけを手に入れていると思います。

<?xml version="1.0"?>からまでのテキストを取得するのを手伝ってもらえます</log>か?

わかりやすくするために編集: xml から /log までのすべてのテキストを取得したい。

.str ファイルは によって作成されstringsます。

これが私が使用している実際のファイルです: https://www.dropbox.com/s/j02elywhkhpbqvg/pc1.str?dl=0

20893696から まで20919817

4

2 に答える 2

0

私はおそらくperlを使用します:

#!/usr/bin/perl

use strict;
use warnings;

while ( <> ) {
     print if m,<?xml version, .. m,</log>,
}

これは、ファイルが 2 つのマーカーの間にある場合に true を返す「range」演算子を利用します。デフォルトでは、$/改行であるレコードセパレーターを使用します。データに改行がある場合は簡単ですが、代わりにバイトに基づいて反復できます。(境界のオーバーラップについて心配する必要がある場合があることに注意してください)。

例えば

$/ = \80; 

一度に 80 バイトを読み取ります。

于 2015-06-24T19:01:11.143 に答える
0

を含む行から最初.strの行までのファイルのすべての行が必要な場合、これは機能するはずです。<?xml version="1.0"?></log>

awk '/<?xml version="1.0"?>/{p=1} p; /<\/log>/{exit}' pc1.str

開始線を合わせて設定しp=1ます。ptrue-y の場合、現在の行を出力します。行を終了タグと一致させて終了します。

ファイルからの基数フィールドなしで出力が必要な場合は、次のようなものが機能するはずです。

cut -f 2 pc1.str | awk '/<?xml version="1.0"?>/{p=1} p; /<\/log>/{exit}'

これによりcut、最初の基数フィールドが切り捨てられます (awk はフィールド範囲には適していません)。

開始 xml マーカーの前と終了タグの後にあるものも無視したい場合は、</log>このようなものが機能するはずです (未テスト)。

cut -f 2 pc1.str | awk '/<?xml version="1.0"?>/{p=1; $0=substr($0, 1, index($0, "<?xml version=\"1.0\"?>"))} {sub(/^.*<\/log>/, $0, "&")} p; /<\/log>/{exit}'

これは、行の不要な部分を削除するためにsubstrandを使用します。sub

于 2015-06-24T19:28:51.280 に答える