텍스트 파일의 특정 문자열을 공백으로 바꾸는 방법

텍스트 파일의 특정 문자열을 공백으로 바꾸는 방법

텍스트 파일(저작권)의 내용은 다음과 같습니다.

gems/1.8/gems/fxri-0.3.6/fxri-0.3.6.tar.gz/fxri-0.3.6.tar/lib/Icon_Loader.rb
misc/common/groovy/groovy-src-1.7.0.tar.gz/groovy-1.7.0.tar/src/examples/swing/RegexCoach.groovy

...이와 같은 더 많은 파일 경로

tar.gz로 끝나는 파일 이름을 빈 공백으로 바꾸고 싶습니다. 예상되는:

gems/1.8/gems/fxri-0.3.6/fxri-0.3.6.tar/lib/Icon_Loader.rb
misc/common/groovy/groovy-1.7.0.tar/src/examples/swing/RegexCoach.groovy

이것은 작동하지 않습니다:

sed -i -e 's/*.tar.gz//g' copyright

도움이 필요하다.

답변1

로서전반적인 상황, *.tar.gz는 로 끝나는 모든 문자열을 나타냅니다 .tar.gz. 그러나 Sed는아니요사용구체, 그것은 사용일반적인 표현정규식과 구문이 다릅니다. 노력하다:

sed -i -e 's/\/[^/]*\.tar\.gz//g' copyright

위의 정규 표현식은 ( 구분 기호 로 사용되기 때문에 이스케이프 처리함 )로 시작하는 모든 항목 \/과 일치하고 , 그 뒤에는 를 제외한 모든 항목과 일치하는 0개 이상의 문자가 오고 , 그 뒤에는 이스케이프된 위치가 옵니다 . 따라서 마침표만 일치합니다. . (일반적인 정규식 표기법에서는 임의의 한 문자와 일치합니다.)//sed\/[^/]*/.tar.gz..

glob(셸에서 사용)과 정규식(sed, grep 및 기타 중요한 도구에서 사용) 사이에는 많은 차이점이 있습니다. glob에서는 .마침표를 나타냅니다. 정규식에서 .단일 문자를 나타내는 와일드카드 문자입니다. glob에서는 *0개 이상의 임의 문자를 나타냅니다. 정규식에서 는 *0개 이상을 의미합니다.이전 이벤트의.

고급 주제

/sed 대체 명령에서 구분 기호로 사용할 필요는 없습니다 . 다른 구분 기호도 가능합니다 @. 예를 들면 다음과 같습니다.

sed -i -e 's@/[^/]*\.tar\.gz@@g' copyright

위에서 @대체를 제수로 사용했으므로 /첫 번째 제수를 이스케이프할 필요가 없습니다 /.

관련 정보