你能告诉我如何在文件中的多行上多次出现的子串的每个实例上使用Grep吗?
我看了看 https://unix.stackexchange.com/questions/131399/extract-value-between-two-search-patterns-on-same-line 和How 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
答案 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