마지막 문자가 있는 경우에만 어떻게 제거할 수 있나요?
입력하다:
오픈오피스.org/m openOffice.org/ozm 개인의. Pfg. 필. 교수. 각기. 지붕 길이/미터 론 해협
원하는 출력:
오픈오피스.org 오픈오피스.org 퍼스 플루거 필 교수 응답 론스텔 론스터
지금까지는 점만 남겼지만 불행하게도 마지막 sed 명령에서는 문자도 제거되었습니다 g
.
$ cat filename | grep "\." | cut -d"/" -f1 | sed 's/.$//'
답변1
명령의 요점을 벗어나면 sed
모든 것이 잘 될 것입니다. 이와 같이:
sed 's/\.$//'
이스케이프하지 않는 경우 .$
문자열 끝에 있는 모든 문자와 일치하기 때문입니다.
또한 sed
모든 ++를 하나로 넣을 수도 있습니다.grep
cut
sed
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/\.$//'