답변:
sed
명령 에서 점을 이스케이프 처리하면 모든 것이 정상입니다. 이처럼 :
sed 's/\.$//'
이스케이프 처리하지 않으면 .$
문자열 끝의 모든 문자와 일치합니다.
또한 모든 sed
+ grep
+ cut
를 하나만 넣을 수 있습니다 sed
.
sed 's=/[^/]*$==;s/\.$//' filename
sed -n '/\./{s=/[^/]*$==;s/\.$//;p}
. 어쨌든 grep
+ sed
는 하나보다 훨씬 오래 작동 sed
합니다.
sed 's/[./]\+[^./]*$//'
매개 변수 확장에 대한 설명 이있는 경우에만 문자를 제거하십시오 .
$ var=path.
$ echo "$var ${var%.}"
path. path
이 경우 점은 특별하지 않습니다 (점은 정규식에서는 특별합니다).
다른 패턴은 다음과 %/*
같이 제거 할 수 있습니다 .
$ var=openOffice.org/ozm
$ echo "${var%/*}"
openOffice.org
둘 다 제거하려면 다음을 수행하십시오.
$ var=roonstr./ozm
$ var=${var%/*}
$ var=${var%.}
$ echo "$var"
roonstr
물론 소스 파일로 작업하려면 파일에서 sed를 사용하는 것이 더 빠릅니다.
점을 인용하는 것만 기억하십시오 (문자 그대로 일치 시키려면 그렇지 않으면 모든 문자를 의미 함).
$ sed 's,/.*,,;s,\.$,,' file