[linux] sed를 사용하여 파일의 마지막 n 줄을 제거하는 방법

파일 끝에서 일부 n 줄 을 제거하고 싶습니다 . sed를 사용 하여이 작업을 수행 할 수 있습니까?

예를 들어 2에서 4까지 줄을 제거하려면

$ sed '2,4d' file

그러나 나는 줄 번호를 모른다. 나는 마지막 줄을 사용하여 삭제할 수 있습니다

$sed $d file

하지만 끝에서 n 줄 을 제거하는 방법을 알고 싶습니다 . sed 또는 다른 방법을 사용하여 방법을 알려주십시오.



답변

에 대해 sed모르지만 다음과 head같이 할 수 있습니다 .

head -n -2 myfile.txt


답변

하드 코딩 n이 옵션 인 경우 순차적 호출을 사용하여 sed를 수행 할 수 있습니다. 예를 들어, 마지막 세 줄을 삭제하려면 마지막 한 줄을 세 번 삭제하십시오.

sed '$d' file | sed '$d' | sed '$d'


답변

로부터 나오지 한 라이너 :

# delete the last 10 lines of a file
sed -e :a -e '$d;N;2,10ba' -e 'P;D'   # method 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba'  # method 2

당신이 찾고있는 것 같습니다.


답변

재미 있고 간단 sed하며 tac해결책 :

n=4
tac file.txt | sed "1,$n{d}" | tac

노트

  • "쉘이 명령 에서 $n변수 를 평가하려면 큰 따옴표 가 필요합니다 sed. 작은 따옴표에서는 보간이 수행되지 않습니다.
  • tacA는 cat역 참조man 1 tac
  • {}에서 sed가 분리됩니다 $nd(하지 않을 경우, 보간 비 존재에 쉘 시도 $nd변수)

답변

을 사용 sed하되 쉘이 수학을 수행 d하도록하고, 마지막 23 줄을 제거하기 위해 범위를 지정 하여 명령 을 사용하는 것을 목표로합니다 .

sed -i "$(($(wc -l < file)-22)),\$d" file

안쪽에서 바깥쪽으로 마지막 3 줄을 제거하려면 :

$(wc -l < file)

파일의 줄 수를 알려줍니다 : say 2196

왼쪽 또는 범위의 경우 마지막 23 행을 제거하려고합니다.

$((2196-22))

부여 : 2,174
쉘 해석이 후에 따라서 원래는 나오지 :

sed -i '2174,$d' file

-i내부 편집을 수행 하면 파일은 이제 2173 행입니다!

새 파일로 저장하려면 코드는 다음과 같습니다.

sed -i '2174,$d' file > outputfile


답변

이것을 위해 머리 를 사용할 수 있습니다 .

사용하다

$ head --lines=-N file > new_file

여기서 N은 파일에서 제거하려는 행 수입니다.

원래 파일의 내용에서 마지막 N 줄을 뺀 내용이 이제 new_file에 있습니다.


답변

완전성을 위해 솔루션을 추가하고 싶습니다. 나는 이것을 표준으로 끝내었다 ed.

ed -s sometextfile <<< $'-2,$d\nwq'

이것은 내부 편집을 사용하여 마지막 두 행 삭제 (그것이 비록 않습니다 에 임시 파일을 사용합니다 /tmp!)