内容が次のような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