2016-08-08 8 views
-2

`以下のようなファイルの内容があります。2つの検索条件を持つgrepコマンド

<path 
action="A" 
kind="file">/Demo/svn_dev/src/classes/Util - Copy.cls</path><path 
action="D" 
kind="file">/Demo/svn_dev/src/classes/Admin.cls</path> 
<path action="M" 
kind="file">/Demo/svn_dev/src/classes/AdminUtilCtrl.cls</path> 
</paths> 
<msg>xyz</msg> 

私はメッセージが文字列「XYZ」とアクションが含まれている場合は、ファイルのパスをretriveする必要がある=「D」私は/デモ/ svn_dev/srcに/クラス/管理者として置くアウトを取得する必要があります。ここ 。 cls 誰でもgrepコマンド構文を助けることができます。詳しい情報が必要な場合はお知らせください。 あなたの助けをありがとう

+2

ここに何らかの努力が見られますか? – sjsam

答えて

2

あなたはgrepでその仕事をすることはできません。ここではGNUのマルチchar型のRSのためのawkとの一致のための第三引数()でそれを行うための一つの方法です:grep

$ cat tst.awk 
BEGIN { RS="\\s*</[^>]+>\\s*" } 
match($0,/^<path\s*action="D"[^>]+>(.*)/,a) { act = a[1] } 
/^<msg>xyz$/ { print act } 

$ awk -f tst.awk file 
/Demo/svn_dev/src/classes/Admin.cls 
0

あなたは秒を抽出するために、第一のパターンの存在に調節することができますが、少しを必要とします情報を抽出する作業の後

$ grep -q '<msg>xyz</msg>' file && grep -A1 'action="D"' file | 
    sed -n -r '$s/[^>]*>(.*)<.*/\1/p' 

/Demo/svn_dev/src/classes/Admin.cls 

ただし、改行が投稿されたテキストと異なる場合、すべてが失敗することがあります。 xml対応のツールを使用する方が良いでしょう。

関連する問題