예를 들어, 줄의 마지막 문자가 이면 마지막 단어를 어떻게 인쇄합니까 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를 사용하여 -ne
non-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