0

我的目标是只显示最后一个]符号之后的文本。

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为什么符号和的行为不同]

先感谢您。

4

3 回答 3

3

您不需要转义]

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

产生:rld

于 2013-01-03T08:09:43.773 回答
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
于 2013-01-03T08:12:37.083 回答
0

删除了转义字符,它对我有用。

$ echo He]ll]o Wo]rld | grep -o "[^]]*$"
> rld
于 2013-01-03T08:07:57.010 回答