![텍스트 파일의 특정 문자열을 공백으로 바꾸는 방법](https://linux55.com/image/177362/%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EA%B3%B5%EB%B0%B1%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
텍스트 파일(저작권)의 내용은 다음과 같습니다.
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
위에서 @
대체를 제수로 사용했으므로 /
첫 번째 제수를 이스케이프할 필요가 없습니다 /
.