2016-08-09 2 views
1

로그 :정규식은 실행으로 시작과 끝 :

runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 :: 

정규식 :

sed 's/run* ==>> [0-9]* //g' -i sample.log 

그것이 작동하지 않습니다.

Name ==>> Suresh :: Age ==>> 21 :: 

이 도와주세요 : 나는 실행

예상 출력을 시작하는 모든 문자열을 제거 할.

+1

'n 개의 *가'일치하기 때문에이 작동하지 0 또는 더 많은 'n'기호. '[^ =] *'을 의미해야합니다. –

답변

1

n*이 0 이상 n 기호와 일치하기 때문에 작동하지 않습니다. .*을 사용하면 너무 많은 문자열을 제거 할 수 있습니다. 내가 [^=]**을 (즉, = 이외의 0 개 이상의 문자와 일치합니다) 또한 주위의 공백 ::을 제거하기 위해 마지막에 *:: *을 추가 교체 사용하는 것이 좋습니다

:

sed 's/run[^=]* ==>> [0-9]* *:: *//g' 

this demo를 참조하십시오. .+?Name은과 이름을 포함한 아무것도 보이는

sed -r 's/.+?Name/Name/g' 

:

0

는 다음을 사용할 수 있습니다. 그런 다음 우리가 발견 한 모든 부품을 Name으로 교체하여 이전 부품을 효과적으로 제거합니다.

참고 옵션 sed에 전달 :

-r use extended regular expressions in the script 

데이터 예 :

$ cat m 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 :: 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> foo :: Age ==>> 20 :: 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> bar :: Age ==>> 1 :: 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> baz :: Age ==>> 0 :: 

출력 예 :

$ cat m | sed -r 's/.+?Name/Name/g' 
Name ==>> Suresh :: Age ==>> 21 :: 
Name ==>> foo :: Age ==>> 20 :: 
Name ==>> bar :: Age ==>> 1 :: 
Name ==>> baz :: Age ==>> 0 :: 
관련 문제