Perlまたはgrepを使用してテキストファイルから特定のテキストをコピーする

Perlまたはgrepを使用してテキストファイルから特定のテキストをコピーする

次のようにプレーンテキストファイルの一部をコピーする必要があります。

テキストファイルは、次の形式の一連の「ページ」で構成されています。

<page    [lots of lines of text]       /page>

<page    [lots of lines of text]       /page>

<page    [lots of lines of text]       /page>

<page    [lots of lines of text]       /page>

3番目の「ページ」をコピーする自動方法が必要です。見つけることができるショートカットがありますか? (同様に「3rd」を「23rd」に変えるなど)

理想的には、ファイルを解凍し、結果のテキストファイルにコピーして再圧縮するbashスクリプトが必要です。これの目的は、xournalにページをコピーさせることです。

ベストアンサー1

これには実際のタグパーサーを使用する必要がありますが、少なくともフォーマット記述を次のように解釈する必要があります。

<page line one
line two /page>
<page line three
line four /page>
<page line five
line six /page>

クイックawkソリューション1が許可されている場合は、これを行うことができます。

awk -v pagenum=2 'BEGIN {RS="/page>"; ORS=RS} FNR==pagenum {print} 1' file

またはそれほど不思議ではありません。

awk -v pagenum=2 'BEGIN {RS="/page>"; ORS=RS}; FNR==pagenum {print}; {print}' file

ここでコピーしたいページ番号はシェルの引数として渡されます-v pagenum=


最後のタグの後に「stuff」がある場合、上記/page>の式はそれを不完全なレコードとして扱い、偽の最終/page>レコード区切り文字を追加できます。この場合、次の修正された式がよりうまく機能する可能性があります。

awk -v pagenum=2 'BEGIN {RS="/page>"; ORS=""; OFS=""} FNR==pagenum {print $0,RT} {print $0,RT}' file
  1. gawk3.1.8および3.3でmawkテストされています。

おすすめ記事