我有一个包含许多大括号单词的文件,例如。{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)
我最初的公式使用“{.*}”,但是在一行中找到的最宽的括号,而不是最小的括号将被返回......