마지막 문자가 "r"이면 마지막 단어를 인쇄합니다.

마지막 문자가 "r"이면 마지막 단어를 인쇄합니다.

예를 들어, 줄의 마지막 문자가 이면 마지막 단어를 어떻게 인쇄합니까 r?

I am reading the book
I am reading the letter

결과:

letter

나는 bash Linux를 사용합니다.

답변1

$ awk '/r$/ { print $NF }' file
letter

awk이는 각 줄이 문자로 끝나는지 여부를 테스트하는 데 사용됩니다 r. 테스트는 정규식을 사용하여 수행됩니다 r$. 이 표현식은 마지막 문자가 .인 경우에만 일치합니다 r. 일치하는 항목이 있으면 $NF공백으로 구분된 마지막 필드인 를 인쇄합니다.

이는 줄 끝에 후행 공백이 없고 "단어"가 일부 공백으로 구분된 문자열이라고 가정한다는 점에 유의하세요.


사용 sed:

$ sed -e '/r$/!d' -e 's/.* //' file
letter

r이는 먼저 an (첫 번째 표현식) 으로 끝나지 않는 줄을 건너뜁니다 . 그런 다음 바꾸기 명령을 사용하여 나머지 모든 줄의 마지막 공백 문자까지 모두 삭제합니다. 그런 다음 나머지를 출력하십시오.

다시 말하지만, 이는 어떤 줄에도 후행 공백 문자가 없고 "단어"가 공백으로 구분된 문자열이라고 가정합니다.


++를 사용하세요 rev(진지하게 사용하라고 제안하는 것은 아닙니다) cut.grep

$ rev file | cut -d ' ' -f 1 | rev | grep 'r$'
letter

이는 비표준 유틸리티를 사용하여 각 개별 라인을 반전시킵니다 rev. 그런 다음 를 사용하여 공백으로 구분된 첫 번째 문자열을 추출 cut하고 결과 단어를 원래 순서로 바꿉니다. 그런 다음 유틸리티는 익숙한 정규식을 사용하여 grep로 끝나는 모든 단어를 추출합니다.r

답변2

사용행복하다(이전 Perl_6)

~$ raku -ne '.words.[*-1] andthen .put if .grep(/ r $ /);'  file

또는

~$ raku -ne '$_ = .words.[*-1]; .put if .grep(/ r $ /);'  file

이 문제를 해결하려면 Perl 언어 계열을 사용하는 것이 좋습니다. 위의 Raku를 사용하여 -nenon-autoprint 플래그를 사용하여 입력 파일을 한 줄씩 읽습니다. 입력은 분해되고(예: 공백으로 분할) words마지막 요소(예: 단어)는 유지됩니다. .[*-1]첫 번째 예에서는 Raku의 테마 변수 andthen에 마지막 단어를 다시 로드하는 데 사용됩니다 . $_두 번째 예에서는 $_값이 단순히 할당됩니다 .words.[*-1].

grep여기에서 정규식과 일치하는 항목이 발견되면 전체 단어가 반환됩니다 / r $ /. 참고: Raku는 정규식에서 공백을 허용하여 가독성을 높이는 경우가 많습니다.

입력 예:

I am reading the book
I am reading the letter

예제 출력:

letter

정의를 포함한 Raku 링크는 아래에 있습니다 word.

https://docs.raku.org/routine/words
https://docs.raku.org/언어/regexes
https://raku.org

관련 정보