来自参考: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
仍然返回整条线......
出了什么问题?
答案 0 :(得分:3)
试试这个:
sed -n '|content/folder\[@name.*Failure|s|.*content/folder\[@name\(.*\)Failure.*|\1|' source.csv
/re1/,/re2/
用于选择一系列行,而不是一行中的文本范围。由于content/folder
和Failure
位于同一行,因此您不需要范围,只需要与包含两者的行匹配的正则表达式。然后使用s///
在它们之间添加部分。
答案 1 :(得分:2)
sed 's,.*/content/folder\[@name=\(.*\)Failure.*,\1,' source.csv
答案 2 :(得分:2)
grep -Po '(?<=@name=).*(?=Failure)' source.csv