스택 오버플로 질문의 답변을 바탕으로sed/grep을 사용하여 두 단어 사이의 텍스트를 추출하는 방법은 무엇입니까?, 우리는 두 단어 사이의 텍스트를 얻을 수 있습니다:
sed -n "/first/,/second/p" file
그런데 아래와 같이 파일의 단어와 마지막 줄 사이에 텍스트를 가져오려면 어떻게 해야 할까요?
sed -n "/word/,/lastline/p" file
답변1
수행하려는 마지막 줄을 포함합니다.
sed -n '/word/,$p'
word
이는 마지막 줄까지 모든 항목 의 첫 번째 항목과 일치 하고 모든 일치 항목을 인쇄합니다.
마지막 줄 제외:
sed '/word/,$!d;$d'
...삭제부정적인일치시킨 후 마지막 줄을 삭제하세요.
마지막 게임에서 마지막 행까지 가려면 더 열심히 노력해야 합니다.
sed -e :n -e '/\n.*word/D;N;$q;bn'
반복됩니다 - 일반 sed
라인 루프를 완료하지 않고 대신 다음 입력 라인을 패턴 공간 버퍼에 추가하고 b
다시 수행하기 위해 돌아갑니다. 그러나 패턴 공간에 최소한 두 줄이 있고 마지막 줄이 일치하는 경우단어일치하는 라인을 제외하고 버퍼의 모든 것을 삭제합니다.단어. 마지막 줄에서는 quits
루프가 중단됩니다. 따라서 인쇄되는 것은 다음을 포함하는 줄의 마지막 항목에 있는 모든 것입니다.단어마지막 줄까지.
흠... 아마도 내가 필요 이상으로 힘들게 만들고 있는 것 같습니다.
sed 'H;$x;/word/h;$!d'
이런 방식으로 공간을 보존하기 위해 각 행이 추가됩니다. 근데 라인이 일치하네단어그 다음에씌우다공간을 유지하세요. 마지막 라인을 제외한 패턴 공간의 모든 라인이 삭제됩니다. 마지막 라인에서는 홀드 공간에 붙인 직후 홀드 공간과 패턴 공간이 스왑됩니다.(마지막 줄에 단어도 포함된 경우)그리고 지난번의 모든 것단어인쇄 오버레이 예약 공간.
답변2
awk를 사용할 수도 있습니다.
파일 끝에 일치하는 항목 포함
awk '/word/{x=1}x' file
첫 번째 일치 이후 파일 끝까지
awk 'x;/word/{x=1}' file