grep for子串和字符之间的多个字符串实例?

时间:2015-12-05 18:08:35

标签: awk sed grep pcre

你能告诉我如何在文件中的多行上多次出现的子串的每个实例上使用Grep吗?

我看了看 https://unix.stackexchange.com/questions/131399/extract-value-between-two-search-patterns-on-same-lineHow to use sed/grep to extract text between two words?

但我的问题略有不同 - 每个子字符串前面都会紧跟字符串:name">,并且会在我想要的子字符串的最后一个字符之后立即终止为<字符。

所以一行可能是

<"name">Bob<125><adje></name><"name">Dave<123><adfe></name><"name">Fred<125><adfe></name>

我希望输出为:

Bob
Dave
Fred

2 个答案:

答案 0 :(得分:0)

虽然awk不是xml处理的最佳工具,但如果您的xml结构和数据足够简单,它将会有所帮助。

$ awk -F"[<>]" '{for(i=1;i<NF;i++) if($i=="\"name\"") print $(++i)}' file
Bob
Dave
Fred

我怀疑标签是<"name">。如果是<name>,则不使用引号将脚本中的条件更改为$i=="name"

答案 1 :(得分:0)

gawk的

awk -vRS='<"name">|<' '/^[A-Z]/' file
Bob
Dave
Fred