.png)
다음은 "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
즉, 적용할 수 없음).