2013-01-03 2 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

좋은 대답을하지만, 영업 이익은 ('$를') 고정 언급 있습니다. – Lekensteyn

관련 문제