0

来自参考: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

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

什么问题?

4

3 回答 3

3

尝试这个:

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

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

于 2013-06-07T06:12:21.103 回答
2
sed 's,.*/content/folder\[@name=\(.*\)Failure.*,\1,' source.csv
于 2013-06-07T06:14:02.857 回答
2
grep -Po '(?<=@name=).*(?=Failure)' source.csv
于 2013-06-07T06:44:08.367 回答