2016-07-20 1 views
2

나는 file.txt 파일을 가지고 있으며 파일의 두 번째 - 마지막 줄을 삭제해야합니다. 아래의 세 가지 sed 명령은 두 번째 행부터 마지막 ​​행까지 인쇄 할 수 있습니다. 하지만 그 줄을 지워야합니다. 어떤 도움 ??sed를 사용하여 두 번째 - 마지막 줄 파일 삭제

sed -e '$!{h;d;}' -e x file.txt 

sed -n 'x;$p' file.txt 

sed 'x;$!d' file.txt 

$ 고양이 file.txt를
사과

바나나
당근
베리

우리가 파일의 마지막에서 두 번째 라인을 삭제할 수 있습니다
을 수행합니다. 문자열/패턴을 기반으로하지 않습니다.
b. 패턴에 따라 - 마지막에서 두 번째 라인이 (나오지 GNU)을 당신을 위해 작동 할 수

+0

'sed' 외에도 옵션이 있습니까? 예 : '머리'또는 '꼬리'와 같은 것을 사용 하시겠습니까? –

+0

# 1은'head -n -2 file.txt; tail -n 1 file.txt' –

답변

4

"당근"을 포함하는 경우 :이 패턴 공간에 두 줄의 창을 설정

sed -i 'N;$!P;D' file 

및 두 번째가 마지막이 아닐 때마다 그 중 첫 번째를 인쇄합니다. 다음 행을 가져올 수 없으므로 마지막 행이 항상 인쇄됩니다. 나는이 오래된 질문이다 알지만, 내가 본 적이 없다 나는 무엇을 사용

sed -i 'N;$!P;${/pattern.*\n/!P};D' 
+0

Potong, 그냥 테스트 한 결과, 두 번째 - 마지막 줄없이 출력하지만 실제 파일에서 줄을 지우지 않았습니다. – Arun

+1

@Arun 파일을 인라인으로 업데이트하려면'-i' 옵션을 추가해야합니다. 편집을 참조하십시오. – potong

+0

Potong, 작동합니다. 'N; $! P; D'부분을 설명 할 수 있습니까? – Arun

1

: 패턴을 기반으로 파일의 마지막에서 두 번째 라인을 삭제

는 달성 할 수 도움이 될 수 있도록 추가하겠습니다. tacsed을 결합

은 매우 쉽게이 있습니다 :

mv file.txt file.txt.bak 
tac file.txt.bak | sed '2d' | tac > file.txt 

이 파일의 마지막에서 두 번째 줄을 제거합니다. "순수한"sed 솔루션이 아니며 중간 파일이 필요하지만 IMHO가 이해하기 쉽기 때문에 자주 사용합니다.