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

use*_*737 3 grep bash

我有一个包含许多大括号单词的文件,例如。{test1}, {test2} - 我将如何grep为这些单词输出一个不同的列表?

输出示例:

{test1}
{test2}
Run Code Online (Sandbox Code Playgroud)

我试过这个没有用:

grep -o {.*} file.xml  | sort | uniq
Run Code Online (Sandbox Code Playgroud)

更新

实际上 - 这似乎有效:

grep -oP '{.*?}' file.xml | sort | uniq
Run Code Online (Sandbox Code Playgroud)

小智 5

第一次尝试有两个问题。{.*}包含需要保护以防止 shell 扩展的特殊字符;在模式周围加上引号。此外,{.*}匹配行上最长的以大括号分隔的文本,因此如果您有一行包含,hello {test1} world {test2} howdy则输出是{test1} world {test2}因为.*匹配test1} world {test2

以下将仅输出括号之间的内容。

grep -o -e "{[^}]*}" 
Run Code Online (Sandbox Code Playgroud)

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