파일에서 마지막 줄 삭제


44

sed 특정 위치의 줄을 빠르게 삭제 하는 데 사용 합니다.

sed '1d'
sed '5d'

그러나 파일의 마지막 줄을 삭제하고 줄 수를 모르는 경우 어떻게해야합니까 (나는 wc몇 가지 다른 트릭 을 사용하여 얻을 수 있음을 알고 있습니다 ).

현재와 해결 방법을 사용 head하고 tail결합으로 wc그렇게 할 수 있습니다. 여기에 빠른 비틀기?


어느 OS? 일부 맛에 대한 흥미로운 옵션이 headtail...
닐스

@Nils 'Red Hat Enterprise Linux Server 릴리스 5.5 (Tikanga)'에 있습니다. 다른 맛에 대한 옵션을 지적 head하고 tail알 수 있습니까?
mtk

나는했다. 아래를 참조하십시오.
Nils

답변:


87

sed $에서 마지막 줄이므로 마지막 줄을 삭제하십시오.

sed '$d' <file>

12
sed -i '$d' <file>파일을 제자리에서 편집하는 데 사용 합니다.
WanderingMind

1
마지막 n 줄을 삭제하기 위해 무엇을해야합니까? 여기서 n은 정수입니다.
Joshua Salazar

31

마지막 줄에 $

sed '$d' file

9
30 초 당신을 이길 : P
h3rrmiller

1
안타깝게도 마지막 두 줄을 삭제하려면 더 복잡한 기술을 사용해야합니다.
dubiousjim

무슨 소리 야? sed '$d' file; sed '$d' file
Rob

3
@Rob : sed '$d' file실제로 파일을 수정하지는 않습니다. 마지막 줄을 뺀 파일의 내용을 인쇄합니다. 따라서 매번 마지막 줄을 뺀 sed '$d' file; sed '$d' file파일의 내용을 두 번 인쇄합니다 . 마지막 두 줄 삭제 sed '$d' file는에 해당 sed '$d' file | sed '$d'합니다.
ruakh

2
예, 그것은 우아하지는 않지만 물론 작동합니다. 와 함께 한 번에 할 것입니다 sed -n '1{h;n;}; $q; x; p;'. 나는 우리가 할 수 없다고 삐걱 거리고 있었다 sed '$-1,$d'.
dubiousjim

14

cat file.txt | head -n -1 > new_file.txt

조심이의 마지막 줄에 따라 같다 file.txt(이로 끝나는 경우 EOF, 또는 \n다음과 EOF, 행 수)가 new_file.txt동일 (로 할 수있다 file.txt(이 더있을 때 일어나지이 명령 후를) \n) - 어떤 경우에, 마지막 줄의 내용이 삭제됩니다.

또한 두 번째 (중간) 파일을 사용해야합니다. 동일한 파일로 분류하여 리디렉션하면 파일이 지워집니다.


6
이것이 작동하는 곳은 간단 할 수도 있습니다 head -n -1 file.txt > new_file.txt. 음수 카운트 head -n는의 일부 구현에서만 사용할 수 있습니다 head. 예를 들어, FreeBSD 또는 BusyBox 버전에서는 작동하지 않습니다 head.
dubiousjim

1
@dubiousjim : 동의 head -n -1 file.txt > new_file.txt합니다. 내 두 주석 (같은 줄 수 및 동일한 파일에서 지우기)과 동일한 방식으로 작동합니다. 부정적인 주장에 관해서는, 그러한 차이는 유닉스 사이에서 때때로 발생하며, 당신이 완전히 같은 명령을 기대하기 때문에 종종 좌절하고 있습니다 (왜 당신은 같은 이름과 목적을 가지고 있지 않습니까!). 포인트. (데비안을 사용합니다.)
Emanuel Berg

5

head --lines=-1. SLES11SP2 시스템 맨 페이지 (coreutils-8.12-6.23.1)에서이 가능성을 처음 발견했습니다.

tailhead의 일부 coreutils(RPM - 기반 시스템에 대한 적어도) -rpm.

coreutils의 변경 로그에 따르면이 구문은 coreutils 버전 5.0.1부터 지원됩니다

나쁜 소식 : RH5 매뉴얼 페이지에 따르면이 옵션은 설명되어 있지 않습니다

좋은 소식 : RH5와 함께 작동합니다 (최소한 현재 RH5 버전에서는 작동합니다).

rpm -q coreutils (CentOS 5.8에서) : coreutils-5.97-34.el5_8.1

RH5.5인지 확실하지 않습니다. 이미이를 지원하는 coreutils 버전이 있습니다. 그러나 5.5는 어쨌든 EoLed를 사용했습니다.


+1. RH5.5에서 완벽하게 작동합니다. 감사.
mtk

0

리눅스

$는 마지막 줄이며 d는 삭제입니다.

sed '$d' ~/path/to/your/file/name

맥 OS

sed -i와 동일

sed -i '' -e '$ d' ~/path/to/your/file/name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.