我有一个包含许多大括号单词的文件,例如。 {test1},{test2} - 我如何grep
处理这些单词并输出它们的不同列表?
输出示例:
{test1}
{test2}
我试过这个没有用:
grep -o {.*} file.xml | sort | uniq
更新
实际上 - 这似乎有效:
grep -oP '{.*?}' file.xml | sort | uniq
答案1
您的第一次尝试存在两个问题。{.*}
包含需要保护的特殊字符,以免被 shell 扩展;将模式括在引号中。此外,{.*}
匹配行上最长的括号分隔文本,因此如果您有一行包含,hello {test1} world {test2} howdy
则输出{test1} world {test2}
为因为.*
匹配test1} world {test2
。
以下将仅输出括号之间的内容。
grep -o -e "{[^}]*}"
我最初的公式使用“{.*}”,但是在一行中找到最宽的括号,而不是最小的括号会被返回......