sed
파일의 여러 줄을 인쇄하는 oneliner가 있습니다 .
sed -n '10,20p' file.txt
위 코드는 file.txt의 10행부터 20행까지 인쇄합니다.
그런데 줄 번호를 어떻게 인쇄할 수 있나요?
답변1
노력하다 awk
:
awk 'FNR==10,FNR==20 {print FNR ":" $0}' file.txt
그러면 줄 번호, 콜론, 그리고 10~20 범위의 줄이 인쇄됩니다.
또는 20행 이후 읽기를 중지합니다.
awk 'FNR >= 10 {print FNR ":" $0}; FNR == 20 {exit}' file.txt
여러 파일을 처리하고 awk
구현에서 이 nextfile
지시문을 지원하는 경우:
awk -v OFS=: 'FNR >= 10 {print FILENAME, FNR, $0}; FNR == 20 {nextfile}' ./*.txt
(현재 파일 이름도 여기에 인쇄됩니다.)
답변2
sed
=
줄번호를 출력하는 명령어 가 있습니다 .
sed -n '10,20{=;p}' file.txt
그러나 실제 줄 위에 별도의 줄에 줄 번호를 인쇄합니다.
실제 줄과 같은 줄에 줄 번호를 원할 경우 파이프를 사용할 수 있습니다nl
도착하다 sed
,
nl file.txt | sed -n '10,20p'
nl
더 나은 출력을 얻으려면 일부 플래그를 설정해야 할 수도 있습니다 . 숫자와 줄 사이의 구분 기호, 숫자 오른쪽 정렬 등 alias nl='nl -b a -n rz -s "|" -w1'
으로 사용할 수 있도록 별칭을 지정했습니다 .|
답변3
만 사용하십시오 sed
.
sed -n '10,20{=;p}' file.txt | sed '{N; s/\n/ /}'
N;
sed
패턴 공간에 다음 줄을 추가하라고 지시하므로sed
이제 이 두 줄이 처리되고 있습니다.s/\n/ /
개행 문자를 공백으로 대체하여 두 줄을 "병합"합니다.
원천:
설명자알라 알리(소스 2)
답변4
$ < file grep -ne '^' | sed -ne '10,20p'
$ < file sed -e '10,20!d;=;20q' | paste -d: - -
Not so UUOC:
$ cat -n file | sed -nEe '10,20s/^\s*(\S+)\t/\1:/p'
$ perl -lne 's/^/$.:/;
print if 10..20;
last if 20..20;
' file