Linux“cat”명령을 사용하면 특정 행만 숫자로 표시하는 방법 줄을 번호 위하여, 어떻게

내가 사용하는 경우 cat -n text.txt자동으로 줄을 번호 위하여, 어떻게 만 특정 번호가 매겨진 선을 표시하는 명령을 사용합니까.



답변

사용하다 sed

용법

$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

한 줄을 인쇄하려면 (5)

$ sed -n 5p file
Line 5

여러 줄을 인쇄하려면 (5 및 8)

$ sed -n -e 5p -e 8p file
Line 5
Line 8

특정 범위를 인쇄하려면 (5-8)

$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8

다른 특정 줄로 범위를 인쇄하려면 (5-8 및 10)

$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10

답변

이를 수행하는 한 가지 방법은 다음을 사용하는 것입니다 sed.

cat -n text.txt | sed '11d'

여기서 11은 제거하려는 행 번호입니다.

또는 11을 제외한 모든 것을 제거하려면 :

cat -n text.txt | sed '11!d'

범위도 가능합니다 :

cat -n text.txt | sed '9,12!d'

그리고 cat -n필요하지도 않습니다 :

sed '9,12!d' text.txt

답변

awk를 똑바로 사용할 수 있습니다.

awk 'NR==1' file.txt

‘1’을 원하는 줄 번호로 바꿉니다.


답변

내가 머리 나 grep을 좋아하는 목표에 따라

cat /var/log/syslog -n | head -n 50 | tail -n 10

41 ~ 50 행을 반환합니다.

또는

cat /var/log/syslog -n | grep " 50" -b10 -a10

grep 방법의 문제점은 줄 번호를 채우는 데 계정을 사용해야한다는 것입니다 (공백에주의하십시오).

둘 다 로그 파일을 구문 분석하는 데 매우 편리합니다.


답변

다른 사람들이 당신을 보여 주었 듯이 사용할 필요가 없습니다 cat -n. 다른 프로그램이 당신을 위해 그것을 할 것입니다. 그러나 실제로 출력을 구문 분석하고 cat -n특정 행 (예 : 4-8, 12 및 42) 만 표시 해야하는 경우 다음을 수행 할 수 있습니다.

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
 4  Line 4
 5  Line 5
 6  Line 6
 7  Line 7
 8  Line 8
12  Line 12
42  Line 42

에서는 awk, $1첫 번째 필드이므로, 4, 8 (포함 함) 또는 II) (12) 또는 ⅲ) (42) 사이의 명령 인쇄 모국어 필드 나 모든 라인).

cat -n파일에서 원래 줄을 얻기 위해 추가 한 필드를 제거하려면 다음을 수행하십시오.

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42