파일의 특정 줄 번호 앞에 패턴과 일치하는 줄을 가져와야합니다.
예:
linenum 1.fruits
linenum 2.cherry
linenum 3.apple
.
.
linenum 7.orange
linenum 8.apple2
.
.
.
linenum 20.strawberry
위의 파일에서 line8을 원합니다. 나는 그것이 20 번째 줄 위에 올 것이라는 것을 알고 있으며 그 줄에 포함되어 있음을 알고 있습니다 apple
.
답변
태그는 sed 에도 불구하고 내 대답은 사용하지 않습니다 sed
.
다음 명령은 처음 19 행을 가져 와서없는 행을 버린 apple
다음 남은 항목에서 마지막 행을 반환합니다.
head -n 19 | grep "apple" | tail -n 1
이름이 지정된 파일을 처리하려면 다음을 수행하십시오 file.txt
.
<file.txt head -n 19 | grep "apple" | tail -n 1
답변
다음을 사용하는 솔루션이 있습니다 sed
.
sed -n '20,$d;/apple/h;19{x;p}'
-n
-라인 인쇄 금지20,$d
–20
파일의 끝 부터 끝까지 ($
), 삭제 (d
)/apple/h
-정규식과 일치하는 행/apple/
에 대해서는 ” 보유 공간 “(h
)에 복사하십시오.19{x;p}
-온라인19
에서 패턴을 바꾸고 공백을 잡고 (x
) 패턴 공간을 인쇄합니다 (p
)
그 이후의 19
모든 행이 삭제되므로 최종 인쇄에는 행을 사용해야합니다 . 그렇지 않으면 ” 마지막 줄 “주소를 사용할 수 있습니다 $
.
이 테스트에서는 apple
23 행 을 추가했습니다 .
$ sed -n '20,$d;/apple/h;19{x;p}' < file
linenum 8.apple2
답변
이번에는 Perl에 이미 게시 된 것과 동일한 솔루션입니다.
perl -lane 'if(1..19 and /apple/){$a=$_} END{print $a}' input.txt
그리고 AWK :
awk 'NR<20 && /apple/ {a=$0} END{print a}' input.txt