파일 끝에서 일부 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
. 작은 따옴표에서는 보간이 수행되지 않습니다.tac
A는cat
역 참조man 1 tac
- 은
{}
에서sed
가 분리됩니다$n
및d
(하지 않을 경우, 보간 비 존재에 쉘 시도$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
!)