test.txt
다음 예와 같이 큰 파일이 있습니다 .
foo
before ...
before some line
foo something interesting bar
after some lines
after ...
bar
something interesting
sed
문자열 ""이 처음으로 나타나기 전의 줄만 포함하는 또는 같은 기본 bash 명령을 사용하여 새 파일을 어떻게 생성합니까 ? grep
(아니요 awk
, awk가 없는 내장 장치에서 이 명령을 사용해야 합니다.)
답변1
sed '/something interesting/,$d' < file > newfile
다음과 같이 최적화할 수 있습니다.
sed -n '/something interesting/q;p' < file > newfile
sed
패턴을 찾으면 바로 종료하세요.
sed
@RakeshSharma가 지적했듯이 GNU를 사용하면 구현을 다음과 같이 단순화할 수 있습니다.
sed '/something interesting/Q' < file > newfile
ksh93
대신 을 사용하여 파일을 자르려면 bash
다음을 수행할 수 있습니다.
printf '' <>; file >#'*something interesting*'
<>;
표준<>
리디렉션 연산자(읽기+쓰기용으로 열기)와 유사하지만 명령이 성공하면 파일의 끝 부분이 잘립니다.<#pattern
패턴과 일치하는 다음 줄의 시작 부분을 찾습니다.
(stdout(적어도 ksh93u+에서는)에서는 작동하는 것 같지만 , 또는 printf ''
와 같은 다른 내장 명령에서는 작동하지 않는다는 점 에 유의하십시오 .true
:
eval
실수. 그리고 스크립트의 마지막 명령이 될 수 없습니다(또 다른 오류)).