ファイル内の特定のテキストのみを別のファイルにコピーする

ファイル内の特定のテキストのみを別のファイルにコピーする

内容が次のようなabc.txtファイルがあります。

<classpathentry kind="src" path="Sources"/>
<classpathentry kind="con" path="WOFramework/ERExtensions"/>
<classpathentry kind="con" path="WOFramework/ERJars"/>
<classpathentry kind="con" path="WOFramework/ERPrototypes"/>
<classpathentry kind="con" path="WOFramework/JavaEOAccess"/>
<classpathentry kind="con" path="WOFramework/JavaEOControl"/>
<classpathentry kind="con" path="WOFramework/JavaFoundation"/>
<classpathentry kind="con" path="WOFramework/JavaJDBCAdaptor"/>

すべてのパスを別のファイルにコピーしたいです。つまり、出力テキストファイルが次のようになります。

    WOFramework/ERExtensions
    WOFramework/ERJars
    WOFramework/ERPrototypes
    WOFramework/JavaEOAccess
    WOFramework/JavaEOControl
    WOFramework/JavaFoundation
    WOFramework/JavaJDBCAdaptor

答え1

ファイルが同じパターンに従うと仮定します。この場合、次のコマンドを使用できます。

grep -o ' path=.*$' file.txt | cut -c8- |rev | cut -c 4- | rev

そのため、ファイルを開き、cat文字のみを抽出してから不要なpath=文字を削除し、cutそのrev技術を使用して末尾から不要な文字を削除します。

別のawkメソッド

awk -F'path="' '{print $2}' file.txt |rev | cut -c 4- | rev

私はpath="区切り文字として使用し、その後にすべての情報を印刷します。デフォルトではrev上記と同じことを行います。

テスト

cat file.txt
<classpathentry kind="src" path="Sources"/>
<classpathentry kind="con" path="WOFramework/ERExtensions"/>
<classpathentry kind="con" path="WOFramework/ERJars"/>
<classpathentry kind="con" path="WOFramework/ERPrototypes"/>
<classpathentry kind="con" path="WOFramework/JavaEOAccess"/>
<classpathentry kind="con" path="WOFramework/JavaEOControl"/>
<classpathentry kind="con" path="WOFramework/JavaFoundation"/>
<classpathentry kind="con" path="WOFramework/JavaJDBCAdaptor"/>

コマンドを実行した後、

Sources
WOFramework/ERExtensions
WOFramework/ERJars
WOFramework/ERPrototypes
WOFramework/JavaEOAccess
WOFramework/JavaEOControl
WOFramework/JavaFoundation
WOFramework/JavaJDBCAdaptor

Stephaneはコメントでより良い方法を提供します。

cut -d '"' -f4 file.txt

答え2

簡単な方法awk

awk -F\" '/WOF/ {print $4}' abc.txt > outfile
  • -F\"フィールド区切り文字をデフォルト値(スペース)から引用符(エスケープ\)に変更する
  • /WOF/各レコード(ファイル行)に対して返される結果をパターンに一致する結果に制限します。WOF
  • $4一致する各レコードの4番目のフィールドであるパス。

答え3

grepと切り取りを実行する別の方法:

grep "kind=\"con\"" sample.txt | cut -d \" -f 4 > sample_edited.txt

これにより、パスを含むすべての行がgrepさ​​れ、kind="con"区切り文字がに設定され、パスが印刷されます。cut"

答え4

あなたのバージョンがPCREスタイルのツアーをサポートしている場合は、grep別のソリューション

grep -oP '(?<=kind="con" path=").+?(?="/>)' abc.txt

関連情報