단어의 마지막 문자를 제거하되 해당 문자가 있는 경우에만 해당 - bash에서

단어의 마지막 문자를 제거하되 해당 문자가 있는 경우에만 해당 - bash에서

마지막 문자가 있는 경우에만 어떻게 제거할 수 있나요?

입력하다:

오픈오피스.org/m
openOffice.org/ozm
개인의.
Pfg.
필.
교수.
각기.
지붕 길이/미터
론 해협

원하는 출력:

오픈오피스.org
오픈오피스.org
퍼스
플루거
교수
응답
론스텔
론스터

지금까지는 점만 남겼지만 불행하게도 마지막 sed 명령에서는 문자도 제거되었습니다 g. $ cat filename | grep "\." | cut -d"/" -f1 | sed 's/.$//'

답변1

명령의 요점을 벗어나면 sed모든 것이 잘 될 것입니다. 이와 같이:

sed 's/\.$//'

이스케이프하지 않는 경우 .$문자열 끝에 있는 모든 문자와 일치하기 때문입니다.

또한 sed모든 ++를 하나로 넣을 수도 있습니다.grepcutsed

sed 's=/[^/]*$==;s/\.$//' filename

답변2

문자를 삭제하다존재하는 경우에만매개변수 확장이 정확히 설명하는 내용입니다.

 $ 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

답변3

정규식을 약간 변경하면 됩니다. 탈출하려면 . 필요하지 않습니다.grep

cat filename | cut -d"/" -f1 | sed 's/\.$//'

관련 정보