Awk / Sed - 如何在两种模式之间打印选择?

时间:2013-06-07 06:04:04

标签: bash shell command-line sed awk

来自参考:catonmat.net我想我可以使用以下内容在两种模式之间进行感兴趣的选择:

Source Text (one line): 6 June 2013 08.32.435 UTF+8 Report /content/folder[@name='....' Failure ....

这里重要的部分是报告的路径,因此我正在使用:

awk '/content\/folder\[@name=/,/Failure/' source.csv

我得到了整个匹配的行,而不是两个匹配之间的内容路径。

我也尝试过:

sed -n '/content\/folder\[@name/,/Failure/ {/content\/folder\[@name\|Failure/!p}' source.csv

仍然返回整条线......

出了什么问题?

3 个答案:

答案 0 :(得分:3)

试试这个:

sed -n '|content/folder\[@name.*Failure|s|.*content/folder\[@name\(.*\)Failure.*|\1|' source.csv

/re1/,/re2/用于选择一系列行,而不是一行中的文本范围。由于content/folderFailure位于同一行,因此您不需要范围,只需要与包含两者的行匹配的正则表达式。然后使用s///在它们之间添加部分。

答案 1 :(得分:2)

sed 's,.*/content/folder\[@name=\(.*\)Failure.*,\1,' source.csv

答案 2 :(得分:2)

grep -Po '(?<=@name=).*(?=Failure)' source.csv