grep 명령을 사용하여 첫 번째 줄을 인쇄하는 방법은 무엇입니까?


17

라는 파일이 file.txt있습니다. grep명령을 사용하여 첫 줄만 인쇄하려면 어떻게 해야합니까?


4
겠습니까 head -1 file.txt작동하지?
clk

@steeldriver 당신은 작업을 위해 이상하게 선택된 grep으로 grep을 수행하는 방법이기 때문에 답을 만들어야합니다.
MelBurslan 1

1
grep파일의 첫 줄을 인쇄하는 데 가장 적합한 도구는 아닙니다. 와 일치하는 첫 번째 줄을 인쇄하고 싶거나을 위해 grep특정 용도로 사용 grep하려는 경우 그 내용을 알려주십시오. 우리가 더 많은 맥락을 가지고 있다면 아마도 우리는 당신과 지역 사회를 더 잘 도울 수있는 답변을 줄 수 있습니다.
DKing

@MelBurslan file.txt에 예를 들어 3 줄이 있습니다. 이것은 새로운 파일입니다. 두 번째 줄 : 파일 이름은 newFile입니다. 세 번째 줄 : 새 줄을 만들지 않았습니다. grep 명령을 사용하여 첫 줄만 어떻게 인쇄 할 수 있습니까? 또한 첫 번째 줄과 마지막 줄을 모두 인쇄하는 데 어떤 명령이 도움이됩니까? 두 질문에 대한 명령을 말씀해 주시겠습니까?
Nithin Santhosh

기존 답변 중 하나라도 문제를 해결하는 경우 확인 표시를 통해 수락하는 것을 고려하십시오. 감사합니다!
Jeff Schaller

답변:


38

기존의 grep 응용 프로그램은 아니지만 다음을 사용하여 수행 할 수 있습니다.

grep -m1 "" file.txt

빈 표현식이 무엇이든 일치하기 때문에 작동하지만 -m1첫 번째 일치 후에 grep이 종료됩니다.

-m NUM, --max-count=NUM
       Stop reading a file after NUM matching lines.

초콜릿으로 덮인 바나나가 생각만큼 쓸모가 없다는 것을 보여 주 +1.
Kamil Maciorowski

4
일부 시스템에서는 작동 할 수 있지만 이식성이 없습니다.grep: unknown option -- m
Kusalananda

1
'첫 번째 줄'과 '첫 번째 줄 일치'의 차이점에 유의하십시오.
Charles

13

이것은 무언가가 아닙니다 grep. "grep"이름 자체는 " 전역 적으로 정규식 검색 및 인쇄" 의 약어로 , ed명령 g/re/p이 수행하는 것입니다 (주어진 정규식 re).

ed1969 년의 대화식 라인 편집기이지만 오늘날에도 시스템에 설치 될 가능성이 높습니다. 우리는 가지고 grep에서 ed, 그것은 특정 기능에 대한 바로 가기 또는 별칭으로 볼 수있는 ed, 그리고 sed"이다, 시냇물ed ", 즉 (비 대화식) 스트림 편집기.

sed대신 사용하자 :

$ sed -n '1p' file.txt

1p문자열은 작은이다 sed"스크립트"그 인쇄 ( p) 지정된 주소 (에 해당하는 라인 1, 첫 번째 줄). 편집 명령 1ped편집기 에서 동일한 작업을 수행합니다 .

-n스크립트는 스크립트에 의해 명시 적으로 인쇄되지 않은 것의 출력을 억제하므로, 우리가 얻는 모든 것은 파일의 첫 줄입니다 file.txt.

또는

$ sed '1q' file.txt

파일의 모든 줄을 인쇄하지만 q인쇄 후 1 줄에서 ( )를 종료 합니다. 이것은 정확히head -n 1 file.txt .

이 (일반화)라는 POSIX 표준에 head -n N많이와 동일한 sed 'Nq', 즉 "모든 라인을 인쇄하지만 줄에서 종료합니다 N". 그 이유 head는 표준에 전혀 포함되어 있었기 때문입니다 tail(기존 Unix 구현과의 호환성).


이것은 가장 밝은 답변이며 첫 번째 답변은 이상한 해킹입니다. 나는 이상한 것이 있다는 것을 알았습니다. grep과 ed의 역사를 보여 주셔서 감사합니다. 이제 모든 것이 이해됩니다.
Tomas Zubiri

6

첫 줄에 고유 한 문자열이 없으면 grep 만 사용하여이 작업을 수행 할 수 없습니다. head -n 1 file.txt그 자리에서 작동합니다.

패턴과 일치하는 첫 번째 줄만 인쇄하려면 grep에 헤드를 파이프하십시오.

head -n 1 * | grep [pattern]


2

그러나 그렙의 또 다른 자유로운 사용 - 찌언 변환 그 선이 후, 사용 후, 줄 번호를 확인 오프 라인 번호 등을 제거하기 위해 grep을 번호로 여러 선회 진행됩니다

function grep1() (
  nlines=$(wc -l < "$1")
  nlw=$(printf "%d" "$nlines" | wc -c)
  nl -d '\n' -ba -n ln -w "$nlw" -s ' ' "$1" | grep '^1 ' | sed 's/^1 *//'
)

function greplast() (
  nlines=$(wc -l < "$1")
  nlines=$((nlines + 0))
  nlw=$(printf "%d" "$nlines" | wc -c)
  nl -d '\n' -ba -n ln -w "$nlw" -s ' ' "$1" | grep "^$nlines " | sed "s/^$nlines *//"
)

나는이 답변을 당신 이 무언가를 할 있다고해서 (grep 또는 bash 또는 ... 등), 당신이 해야 한다는 것을 의미하지는 않습니다. 어쩌면 더 나은 도구가있을 것입니다. sed ( sed 1q또는 sed -n 1p) 및 head ( head -n 1)는 파일에서 첫 번째 줄을 인쇄하는 데 더 적합한 도구입니다. 파일의 마지막 줄을 인쇄 할 경우, 당신은 tail -n 1sed -n '$p'. 이 도구는 위의 기능에서 3+ 대신 단일 명령 일뿐만 아니라 미래 독자들에게도 훨씬 더 명확합니다. 나는 당신의 질문에 대한 (현재 3) 다운 지지자 중 하나가 아니지만 (임의의 근거가없는) 작업을위한 임의의 도구에 대한 귀하의 주장이 그 이유 일 가능성이 높습니다 downvotes. 그것은이 시스템이 극단적으로 같지도 grep도없는 head, tail그리고 sed.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.