grep 文本文件中的大括号条目

grep 文本文件中的大括号条目

我有一个包含许多大括号单词的文件,例如。 {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 "{[^}]*}" 

我最初的公式使用“{.*}”,但是在一行中找到最宽的括号,而不是最小的括号会被返回......

相关内容