패턴을 제외하고 패턴이 처음 발생한 이후의 텍스트 줄을 인쇄합니다(OSX)

패턴을 제외하고 패턴이 처음 발생한 이후의 텍스트 줄을 인쇄합니다(OSX)

다음은 "word"를 제거하고 "word"가 있는 모든 항목을 선택하여 "word"가 있는 전체 텍스트 줄을 인쇄하는 스크립트입니다.

sed -ne 's/word//p'  file.txt >> newfile.txt

"단어"가 처음 나타난 후에 텍스트 줄만 인쇄하고 인쇄된 줄에서 "단어"를 제거하려면 어떻게 해야 합니까?

저는 OSX를 사용하고 있습니다.

다음은 샘플 텍스트입니다.

Blalala 

'Omfoem From

balanf

word I want this output

word Not this output

Omfoem527

이것이 내 예상 결과입니다.

 I want this output

업데이트: 필요한 작업을 수행하는 스크립트는 다음과 같습니다.

sed -n 's/^.*word //p'  file.txt > temp.txt
sed -n '1p' temp.txt >> newfile.txt
rm temp.txt

첫 번째 줄은 "word"를 삭제한 후 "word"가 있는 텍스트의 전체 줄을 인쇄하고 temp.txt 파일에서 "word"가 나타나는 모든 항목을 선택합니다. 또한 "단어" 앞에 다른 텍스트가 오는 경우를 대비하여 ^.*를 추가했습니다.
두 번째 줄은 temp.txt 파일의 첫 번째 줄만 newfile.txt에 인쇄하고 세 번째 줄은 temp.txt 파일을 삭제합니다.

가장 효율적이지는 않지만 작동합니다.

답변1

이 시도,

sed -n '/word/{n;p;q}' file
  • n -> 패턴 공간에 대한 다음 입력 줄을 읽거나 추가합니다.
  • p -> 현재 패턴 공간을 인쇄합니다.
  • q -> 추가 입력을 처리하지 않고 즉시 sed 스크립트를 종료합니다. 첫 번째 항목만...

답변2

하나의 파일만 처리한다고 가정하면,그리고이런 패턴이 나타날 수 있습니다해당 라인에서 한 번만, 다음이 작동합니다:

awk -F"word" 'NF>1 {print $2; exit}' file

그러면 "단어" 패턴을 필드 구분 기호로 사용하고 이러한 "필드"가 여러 개 있는지 확인합니다. 그렇다면 두 번째 필드(다음 텍스트와 동일)를 인쇄 word하고 실행을 중지합니다.

여러 파일을 처리하려면 다음을 사용할 수 있습니다.

awk -F"word" 'NF>1 {print $2; nextfile}' file1 file2 ...

그러나 이는 이식성이 떨어집니다( mawk즉, 적용할 수 없음).

관련 정보