runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 ::
정규식 :
sed 's/run* ==>> [0-9]* //g' -i sample.log
그것이 작동하지 않습니다.
Name ==>> Suresh :: Age ==>> 21 ::
이 도와주세요 : 나는 실행
예상 출력을 시작하는 모든 문자열을 제거 할.
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 ::
정규식 :
sed 's/run* ==>> [0-9]* //g' -i sample.log
그것이 작동하지 않습니다.
Name ==>> Suresh :: Age ==>> 21 ::
이 도와주세요 : 나는 실행
예상 출력을 시작하는 모든 문자열을 제거 할.
n*
이 0 이상 n
기호와 일치하기 때문에 작동하지 않습니다. .*
을 사용하면 너무 많은 문자열을 제거 할 수 있습니다. 내가 [^=]*
와 *
을 (즉, =
이외의 0 개 이상의 문자와 일치합니다) 또한 주위의 공백 ::
을 제거하기 위해 마지막에 *:: *
을 추가 교체 사용하는 것이 좋습니다
:
sed 's/run[^=]* ==>> [0-9]* *:: *//g'
이 this demo를 참조하십시오. .+?Name
은과 이름을 포함한 아무것도 보이는
sed -r 's/.+?Name/Name/g'
:
는 다음을 사용할 수 있습니다. 그런 다음 우리가 발견 한 모든 부품을 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 ::
'n 개의 *가'일치하기 때문에이 작동하지 0 또는 더 많은 'n'기호. '[^ =] *'을 의미해야합니다. –