답변:
sed 솔루션 :
sed -e 1b -e '$!d' file
stdin
if 에서 읽을 때 (예 ps -ef
:) :
ps -ef | sed -e 1b -e '$!d'
UID PID PPID C STIME TTY TIME CMD
root 1931 1837 0 20:05 pts/0 00:00:00 sed -e 1b -e $!d
헤드 & 테일 솔루션 :
(head -n1 && tail -n1) <file
데이터가 명령에서 오는 경우 ( ps -ef
) :
ps -ef 2>&1 | (head -n1 && tail -n1)
UID PID PPID C STIME TTY TIME CMD
root 2068 1837 0 20:13 pts/0 00:00:00 -bash
awk 솔루션 :
awk 'NR==1; END{print}' file
또한 파이프 예제 ps -ef
:
ps -ef | awk 'NR==1; END{print}'
UID PID PPID C STIME TTY TIME CMD
root 1935 1837 0 20:07 pts/0 00:00:00 awk NR==1; END{print}
(head -n1 file;tail -n1 file)
마지막 기호로 매우 큰 명령과 파이프를 가질 수 없기 때문에 가장 좋은 대답 입니다. 너무 | sed '1p;$!d'
짧습니다.
head && tail
정말 당신을 위해 작동 합니까 ? seq 10 | (head -n1 && tail -n1)
인쇄 만합니다 1
.
-e 1b
-첫 번째 줄에서 sed 스크립트의 끝으로 분기하여 암시 적 "인쇄"가 발생합니다. 입력이 한 줄 길이이면 sed가 종료됩니다. 그렇지 않으면 마지막 행을 제외한 모든 행에 대해 삭제하십시오. 마지막 줄에서 암시적인 "인쇄"가 다시 발생합니다.
sed
. 적어도 GNU 4.2.2에서는 유지됩니다. 건배.
sed -n '1p;$p' file.txt
file.txt의 첫 번째와 마지막 줄을 인쇄합니다.
sed -e 1b -e '$!d'
원하지 않으면 선호 할 수 있습니다 .
재미있는 순수한 Bash≥4 방법 :
cb() { (($1-1>0)) && unset "ary[$1-1]"; }
mapfile -t -C cb -c 1 ary < file
그런 다음 ary
첫 번째 필드 (예 : index 0
)가 첫 번째 행이고 file
마지막 필드가 마지막 행인 배열 이 생성 file
됩니다. 콜백 cb
(어레이의 모든 라인을 스러 핑하려는 경우 선택 사항)은 메모리를 어지럽히 지 않도록 모든 중간 라인을 설정 해제합니다. 무료 부산물로 파일에 줄 수 (배열의 마지막 색인 +1)도 있습니다.
데모:
$ mapfile -t -C cb -c 1 ary < <(printf '%s\n' {a..z})
$ declare -p ary
declare -a ary='([0]="a" [25]="z")'
$ # With only one line
$ mapfile -t -C cb -c 1 ary < <(printf '%s\n' "only one line")
$ declare -p ary
declare -a ary='([0]="only one line")'
$ # With an empty file
$ mapfile -t -C cb -c 1 ary < <(:)
declare -a ary='()'
으로 sed
당신이 할 수 d
라인을 elete 경우 NOT1
일 하나 AND NOT 라 $
t의 하나. AND 조건 을 결합하기 위해 조건과 구문을
사용하는 !
데 사용 합니다 .NOT
X{Y..}
X
Y
cmd | sed '1!{$!d;}'
또는 2
nd 에서 lat까지 의 범위를 사용하고 위선을 $
제외한 해당 범위의 모든 줄을 삭제할 수 있습니다 $
.
cmd | sed '2,${$!d;}'
펄 사용하기 :
$ seq 10 | perl -ne 'print if 1..1 or eof'
1
10
위의는를 seq 10
통해 출력의 첫 번째 항목을 인쇄하는 if 1..1
반면, or eof
는 마지막 항목도 인쇄합니다.
/etc
abrt
하고 yum.repos.d
이 질문을 할 필요가?
고양이없이 :
$ cat file |tee >(head -n1) >(tail -n1) >/dev/null
1
5
또는
$ (head -n1 file;tail -n1 file)
1
5
wc -l
파일의 마지막 줄을 출력하는 것과 아무 관련이 없습니다.