STDOUT의 n번째 줄을 가져오는 명령
STDOUT의 n번째 줄을 얻을 수 있는 bash 명령어가 있습니까?
즉, 이것을 가져갈 무언가가
$ ls -l
-rw-r--r--@ 1 root wheel my.txt
-rw-r--r--@ 1 root wheel files.txt
-rw-r--r--@ 1 root wheel here.txt
그리고 비슷한 것을 합니다.
$ ls -l | magic-command 2
-rw-r--r--@ 1 root wheel files.txt
스크립트를 다시 사용해야 할 때는 이것이 좋지 않은 관행이라는 것을 알고 있지만, 셸과 매일 작업할 때는 그러한 방식으로 STDOUT를 필터링할 수 있으면 유용할 것입니다.
저는 이것이 쓰기 위한 반-사소한 명령이라는 것도 알고 있습니다(STDOUT 버퍼링, 특정 행 반환). 하지만 이를 수행할 수 있는 표준 셸 명령이 있는지 알고 싶습니다. 스크립트를 제자리에 놓지 않고도 사용할 수 있습니다.
사용.sed
다양성을 위해:
ls -l | sed -n 2p
필요한 라인이 인쇄될 때 입력을 읽는 것이 중단되므로 더 효율적으로 보이는 이 대안을 사용하면 공급 프로세스에서 SIGPIPE가 생성될 수 있으며, 이는 다음과 같은 원하지 않는 오류 메시지를 생성할 수 있습니다.
ls -l | sed -n -e '2{p;q}'
저는 그것을 충분히 자주 보아왔기 때문에 보통 첫 번째를 사용합니다(어쨌든 타이핑하는 것이 더 쉽습니다).ls
SIGPIPE를 받을 때 불만을 표시하는 명령이 아닙니다.
라인 범위:
ls -l | sed -n 2,4p
여러 라인 범위의 경우
ls -l | sed -n -e 2,4p -e 20,30p
ls -l | sed -n -e '2,4p;20,30p'
ls -l | head -2 | tail -1
멋진 헤드/테일 방식의 대안:
ls -al | awk 'NR==2'
또는
ls -al | sed -n '2p'
sed1 라인에서:
# print line number 52
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files
awk1줄에서:
# print line number 52
awk 'NR==52'
awk 'NR==52 {print;exit}' # more efficient on large files
완전성을 위해 ;-)
단축 부호
find / | awk NR==3
짧은 수명
find / | awk 'NR==3 {print $0; exit}'
사용해 보세요.sed
버전:
ls -l | sed '2 ! d'
"두 번째 줄이 아닌 줄은 모두 삭제"라고 쓰여 있습니다.
awk를 사용할 수 있습니다.
ls -l | awk 'NR==2'
갱신하다
위의 코드는 off-by-one 오류로 인해 우리가 원하는 것을 얻지 못할 것입니다. ls -l 명령의 첫 번째 줄은 전체 줄입니다.이를 위해 다음과 같은 수정된 코드가 작동합니다.
ls -l | awk 'NR==3'
다른 포스터가 제안했습니다.
ls -l | head -2 | tail -1
하지만 헤드를 꼬리에 연결하면 N 라인까지의 모든 것이 두 번 처리되는 것처럼 보입니다.
꼬리를 머리에 끼웁니다.
ls -l | tail -n +2 | head -n1
더 효율적일까요?
Perl을 쉽게 사용할 수 있습니까?
$ perl -n -e 'if ($. == 7) { print; exit(0); }'
분명히 당신이 원하는 숫자를 7로 대체하세요.
예, Jonathan Leffler가 이미 지적했듯이 가장 효율적인 방법은 print & quit과 함께 sed를 사용하는 것입니다.
set -o pipefail # cf. help set
time -p ls -l | sed -n -e '2{p;q;}' # only print the second line & quit (on Mac OS X)
echo "$?: ${PIPESTATUS[*]}" # cf. man bash | less -p 'PIPESTATUS'
음.
제 경우에는 sed가 작동하지 않았습니다.제안합니다.
"홀수" 라인 1,3,5,7...ls |filename '0 == (NR+1) % 2'
짝수 라인 2,4,6,8 ls | '0 == (NR) % 2'를 반환합니다.
완성도를 높이기 위해..
ls -l | (for ((x=0;x<2;x++)) ; do read ; done ; head -n1)
두 번째 줄에 도달할 때까지 줄을 버리고, 그 다음에 첫 번째 줄을 출력합니다.그래서 세 번째 줄을 인쇄합니다.
두 번째 줄이면..
ls -l | (read; head -n1)
필요한 만큼 '읽기'를 입력합니다.
언급URL : https://stackoverflow.com/questions/1429556/command-to-get-nth-line-of-stdout
'programing' 카테고리의 다른 글
이클립스의 모든 코드 블록을 축소할 수 있는 방법이 있습니까? (0) | 2023.05.04 |
---|---|
로컬 Git 분기와 원격 분기를 비교하는 방법 (0) | 2023.04.29 |
WPF 트리 보기에서 항목을 프로그래밍 방식으로 선택하는 방법은 무엇입니까? (0) | 2023.04.29 |
Windows에서 도커 오류: 입력 장치가 TTY가 아닙니다.minty를 사용하는 경우 명령 앞에 'winpty'를 붙여 보십시오. (0) | 2023.04.29 |
코드 행 이동 및 소멸, Eclipse XML Editor 문제 (0) | 2023.04.29 |