正则表达式与`]符号不匹配

时间:2013-01-03 08:06:15

标签: regex grep

我的目标是仅显示最后]符号后面的文字。

echo MY_TEXT | grep -o "[^\]]*$"

输出只是最后一个符号。 如果我将“]”符号更改为任何字母,它将按预期工作。

示例:

$ echo Hello World | grep -o '[^o]*$'
rld  # and this is correct!
$ echo He]ll]o Wo]rld | grep -o "[^\]]*$"
d   # but expected: rld

为什么符号o]的行为不同?

提前谢谢。

3 个答案:

答案 0 :(得分:3)

您无需转义]

echo 'He]ll]o Wo]rld' | grep -o "[^]]*$"

制作:rld

答案 1 :(得分:1)

有几点:[不需要在字符类中转义,您可以使用--color查看只有字母匹配,并注意-o将每个匹配分开新行:

$ echo "He]ll]o Wo]rld" | grep -o '[^]]*$'
rld

$ echo "He]ll]o Wo]rld" | grep --color '[^]]*'
He]ll]o Wo]rld

$ echo "He]ll]o Wo]rld" | grep -o '[^]]*'
He
ll
o Wo
rld

您可以使用]以及其他许多方式删除tr字符:

$ echo "He]ll]o Wo]rld" | tr -d ']'
Hello World

答案 2 :(得分:0)

删除了逃脱角色,它对我有用。

$ echo He]ll]o Wo]rld | grep -o "[^]]*$"
> rld