첫 번째 줄과 마지막 줄을 제외하고 파일 내용을 인쇄합니다.

첫 번째 줄과 마지막 줄을 제외하고 파일 내용을 인쇄합니다.

첫 번째 줄과 마지막 줄을 건너뛰고 파일을 에코하는 쉬운 방법이 있습니까? head에서 파이핑을 보고 있는데 tail, 그런 경우에는 처음부터 전체 행 수를 알아야 할 것 같습니다. 나도 그 방법을 살펴봤지만 split그렇게 할 수 있는 방법을 찾지 못했습니다.

답변1

sed파이프 없이 다음을 수행하십시오 .

sed '1d;$d' file.txt

노트

  • 1의미는첫번째 줄
  • d의미는삭제
  • ;두 명령 사이의 구분 기호입니다.
  • $의미는마지막 줄

더 읽기 쉬운:

sed -e '1d' -e '$d' file.txt

답변2

행 수를 미리 알 필요는 없습니다. tail그리고 head파일의 시작이나 끝에서 각각 오프셋을 얻을 수 있습니다.

파이프라인은 파일의 두 번째 줄에서 시작하고(첫 번째 줄 건너뛰기) 마지막 줄에서 중지합니다(마지막 줄 건너뛰기). 시작이나 끝에서 여러 줄을 건너뛰려면 그에 따라 숫자를 조정하세요.

tail -n +2 file.txt | head -n -1

물론, 반대로 해도 효과는 동일합니다.

head -n -1 file.txt | tail -n +2

답변3

수행 방법은 다음과 같습니다 awk.

awk 'NR>2 {print t} {t=$0}'

또 다른 방법이 있습니다 sed:

sed '1d;x' file.txt

x현재 라인을 이전 라인으로 전환하는 고급 sed명령입니다. 현재 라인은 버퍼로 들어가고, 이전 라인은 화면으로 들어가는 식으로 sed스트림을 한 라인씩 처리하는 동안 계속됩니다(그래서 첫 번째 라인이 공백).

awk각 단계(라인)에 대한 해결책은 현재 라인을 변수에 넣고 두 번째 라인이 지나간 후에만 인쇄를 시작하는 것입니다. 그래서 우리는 두 번째 줄부터 마지막 ​​줄까지 화면에 지저분한 줄 순서를 보게 됩니다. 마지막 줄은 변수에 있고 다음 단계에서만 인쇄되어야 하기 때문에 생략되었습니다. 그러나 모든 단계가 사용되어 화면에 해당 줄이 표시되지 않습니다.

같은 생각 perl:

perl -ne 'print $t if $.>2 ; $t=$_' file.txt

$.줄 번호와 $_ 현재 줄을 나타냅니다.
perl -nwhile(<..>) {..}구조에 대한 단축키이고 -e인라인 스크립트에 대한 단축키입니다.

답변4

파이썬에서는 이렇게 할 것입니다.

#!/usr/bin/python3
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
    L = []
    for line in f:
        line = re.sub(r'\n', r'', line)
        L.append(line)
    print('\n'.join(L[1:-1]))

위 코드를 파일에 붙여넣고 이름을 script.py확인하려는 파일에 대해 스크립트를 실행합니다.

python3 script.py /path/to/the/file

예:

$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana

관련 정보