Awk 带有两个搜索条件的grep命令

Awk 带有两个搜索条件的grep命令,awk,grep,Awk,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/AdminU

`我的文件内容如下

<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>
/Demo/svn_dev/src/classes/Util-Copy.cls/Demo/svn_dev/src/classes/Admin.cls
/Demo/svn_dev/src/classes/adminiutilctrl.cls
xyz
如果消息包含字符串“xyz”和action=“D”,我需要检索文件的路径 在这里,我需要输出为/Demo/svn_dev/src/classes/Admin.cls 有谁能帮我学习grep命令语法吗。如果你需要进一步的信息,请告诉我。
谢谢你的帮助

你不能用grep做那份工作。这里有一种方法可以使用GNU awk实现多字符RS,第三个参数用于match()

$cat tst.awk
开始{RS=“\\s*]+>\\s*”}
匹配($0,/^]+>(.*)/,a){act=a[1]}
/^xyz$/{print act}
$awk-f tst.awk文件
/Demo/svn_dev/src/classes/Admin.cls

使用
grep
可以在第一种模式存在的情况下提取第二种模式,需要在工作结束后稍微提取信息

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

/Demo/svn_dev/src/classes/Admin.cls
$grep-q'xyz'文件&&grep-A1'action=“D”文件

sed-n-r'$s/[^>]*>(*)介意在这里展示一些努力吗?
$ grep -q '<msg>xyz</msg>' file && grep -A1 'action="D"' file | 
  sed -n -r '$s/[^>]*>(.*)<.*/\1/p'

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