2013-01-03 279 views
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]不同?

預先感謝您。

回答

3

你不需要逃避]

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

產地:rld

0

刪除了轉義字符,它爲我工作。

$ echo He]ll]o Wo]rld | grep -o "[^]]*$" 
> rld 
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 
+0

很好的回答,但要注意的是,OP提到的錨定('$')。 – Lekensteyn