첫 줄과 마지막 줄을 건너 뛰고 파일을 에코 할 수있는 간단한 방법이 있습니까? head
에서 tail
로의 배관을 살펴보고 있었지만, 처음부터 전체 라인을 알아야 할 것 같습니다. split
도 살펴보고 있었지만 그 방법도 모르겠습니다.
답변
sed
만 사용, 파이프 없음 :
sed "1d;$d" file.txt
참고
-
1
는 첫 번째를 의미합니다. 줄 -
d
는 삭제 -
;
는 두 명령의 구분 기호입니다. -
$
는 마지막 줄
을 의미합니다.
답변
미리 줄 수를 알 필요는 없습니다. tail
및 head
는 각각 파일의 시작 또는 끝에서 오프셋을 취할 수 있습니다.
이 파이프는 다음에서 시작합니다. 파일의 두 번째 줄 (첫 번째 줄 건너 뛰기)이고 마지막 줄에서 중지합니다 (마지막 줄 건너 뛰기). 시작 또는 끝에서 두 줄 이상을 건너 뛰려면 그에 따라 숫자를 조정합니다.
tail -n +2 file.txt | head -n -1
반대로 수행하면 물론 동일하게 작동합니다.
head -n -1 file.txt | tail -n +2
댓글
Answer
:
awk "NR>2 {print t} {t=$0}"
sed
의 또 다른 방법 :
sed "1d;x" file.txt
x
는 고급 sed
명령으로 현재 줄을 이전 것 : 전류가 버퍼로 들어가 이전 sed
가 한 줄씩 스트림을 처리하는 동안 s가 화면으로 이동합니다 (첫 번째 줄이 비어있는 이유).
awk
각 단계 (줄)의 솔루션은 현재 줄을 변수에 넣고 두 번째 줄이 지나간 후에 만 인쇄를 시작합니다. 따라서 우리는 화면에 두 번째에서 마지막까지 단 하나의 줄 순서를 얻었습니다. 줄이 변수에 있고 다음 단계에서만 인쇄되어야하므로 마지막 줄은 생략되지만 모든 단계가 이미 실행되어 화면에 줄이 표시되지 않습니다.
:
perl -ne "print $t if $.>2 ; $t=$_" file.txt
$.
는 줄 번호를 나타내고 $_
는 현재 줄을 나타냅니다.
perl -n
는
구조 및 -e
는 인라인 스크립트 용입니다.
답변
Mac 사용자의 경우 :
Mac의 경우 head -n -1
가 작동하지 않습니다. 대신 파일을 뒤집고 첫 번째 줄을 자른 다음 다시 뒤집습니다.
tail -r file.txt | tail -n +2 | tail -r
설명 :
-
tail -r
: 입력 줄의 순서를 반대로합니다. -
tail -n +2
: 모든 l을 인쇄합니다. 입력의 두 번째 줄부터 시작하는 ines
설명
- 정확히 말하면
답변
파이썬에서는 이렇게합니다.
#!/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
댓글
-
''.join(list(open("/path/to/file"))[1:-1])
: 이것은 더 간단한 해결책 인 것 같습니다. 🙂 명령 프롬프트에서 직접 수행해야하는 경우 다음을 시도 할 수 있습니다.python -c 'print("".join(list(open("/path/to/file"))[1:-1]))'
head -n -1
는 Ubuntu 14.04.2LTS에서 내.txt
파일의 첫 번째 줄과 마지막 줄을 제거합니다.head -n -1
는head: illegal line count -- -1
head -n -1
가 GNU coreutils, MacOS에 BSD 변형이있을 수 있습니까?