削除方法

削除方法

最初の行が次から始まるファイルがあります。<?xml

sedを使用して削除できます。

/<\?xml/d

しかし、行が始まるかどうかを確認しようとすると -

/^<\?xml/d

一致しません。
しかし、他の行、例えば

<head ...

削除されました

/^<head/d

私も試しました

/^\<\?xml/d

しかし、一致するものはありません。

答え1

使用:

sed '/^<?xml/d' filename

GNU sed は、\?前の文字の 0 個または 1 個を表します。 (POSIX sedでは\?定義されていません。)リテラルを一致させるために?エスケープしないでください。

はい

このテストファイルを考えてみましょう。

$ cat filename
<?xml deleteme
<.xml keepme
..xml keepme

上記の解決策は望ましい結果をもたらしました。

$ sed '/^<?xml/d' filename
<.xml keepme
..xml keepme

質問の最初のコマンドは結果を誤って生成します。

$ sed '/<\?xml/d' filename
$

これはxml、オプションの先行を含むすべての行と一致するためです<。すべての行が含まれているため、xmlすべて削除されます。

2番目のコマンドは何も削除しません。

$ sed '/^<\?xml/d' filename
<?xml deleteme
<.xml keepme
..xml keepme

<これにより、0または1で始まるすべての行が削除されます。まもなく合格xml。行には<常にとの間に1つ以上の文字があるため、xml行は削除されません。

疑わしいときに文字を脱出する方法

文字が正規表現であるかどうかわからず無効にしたい場合は、角かっこ内に入れるのが安全です。

$ sed '/^[<][?]xml/d' filename
<.xml keepme
..xml keepme

内部的に、[...]すべての文字はリテラル文字として扱われます。

答え2

POSIXでは基本正規表現、その動作は\?定義されていません(GNU sedの他のエスケープシーケンスは等です)\|\+ここ)。

GNU sedはデフォルトでBREを使用します。これは、これらのエスケープシーケンスをゼロまたは1つの文字と一致するのと\?同じ意味を持つ特殊文字として扱います。?

したがって<\?xml、0または1の<後にxml、matchが続くことを意味します<?xmlBREの場合^、、、およびのみ特殊文字$です。*.\[したがって、テキストを一致させるには、他のすべての文字を変更しないでください。

sed -e '/^<?xml/d' <file

リテラル文字列と一致させるためにエスケープシーケンスを引き続き使用するには、有効にします。拡張正規表現(これは次のバージョンではPOSIX標準になります。):

sed -E '/^\?xml/d' <file

sed -EBSD sedで使用)

答え3

最初の行が[...]で始まるファイルがあり、行の先頭が一致しないことを<?xml 確認しようとすると/^<\?xml/d

テキストの前には以下を含めることができます。BOM(バイト順表示)。これはUTF-16形式ファイル(特にWindowsシステム上のファイル)で一般的であり、以下を表すために使用されます。バイト順16ビット文字を含むファイルのバイト数。

多くの16進ダンプツール(hex、、、hexdump3つを表す)の1つを使用し、最初の数文字を見るとod -cこれを確認できます。最初の2文字で、またはFF FEが表示されている場合はFE FFBOMです。

BOM を維持する方が良いかもしれないので、RE から出発線の要件を簡単に取り除くことで、解決策が最良に達成されます。

ちなみに、XMLファイルからデータを抽出する場合は、通常REにデータをマイニングするよりも適切に解析する方が良いでしょう。 (もちろん例外もありますが、ファイル、コメント構造などの予期せぬ効果的な再フォーマットを可能にする一般的なケースについて話しています。)

答え4

これがxml変換の結果である場合(xsltprox foo.xsl bar.xmlたとえば、xml行は最初の行にのみあります)。

次のいずれかの方法を使用します。

awk 'NR>1' 

パイプラインにある場合は、次のいずれかを実行します。

awk 'FNR>1' file1 file2 ... > result

ファイルが複数あります。

 sed -i -e 1d file1 file2 ...

関連情報