쉘 명령을 사용하여 ascii 파일의 처음 n 줄을 어떻게 삭제합니까?


92

첫 5-10 줄에 ASCII 텍스트 정보가 포함 된 여러 파일이 있고 잘 짜여진 행렬 정보가 있습니다. 쉘 스크립트에서 다른 프로그램에서 순수한 행렬 정보를 사용할 수 있도록 처음 몇 줄의 텍스트를 제거하고 싶습니다. bash 쉘 명령을 사용하여 어떻게 할 수 있습니까?

도움이된다면 RedHat과 Ubuntu Linux 시스템을 사용하고 있습니다.

답변:


143

파일이 심볼릭 링크 나 하드 링크가 아닌 경우 sed, tail 또는 awk를 사용할 수 있습니다. 아래 예.

$ cat t.txt
12
34
56
78
90

sed

$ sed -e '1,3d' < t.txt
78
90

임시 파일없이 sed를 제자리에서 사용할 수도 있습니다 sed -i -e 1,3d yourfile. 아무 것도 에코하지 않고 파일을 제자리에서 수정합니다. 결과를 다른 명령으로 파이프 할 필요가 없으면 더 쉽습니다.

꼬리

$ tail -n +4 t.txt
78
90

어 wk

$ awk 'NR > 3 { print }' < t.txt
78
90

8
임시 파일없이 sed를 제자리에서 사용할 수도 있습니다 sed -i -e 1,3d yourfile. 아무 것도 에코하지 않고 파일을 제자리에서 수정합니다. 결과를 다른 명령으로 파이프 할 필요가 없으면 더 쉽습니다.
Yanick Girouard

1
감사합니다 @YanickGirouard, @IgnacioVazquezAbrams! 두 분이 방금 저의 연구에 수작업을 절약했습니다! :)
Paul

2
@Svetlana sed -i구체적으로. 대부분의 구현은 파일을 삭제하고 새 파일로 바꾸면 원본을 다른 위치에 남겨두기 때문에 링크에서 작동하지 않습니다.
jw013

6
'1,3d', +4 등을 설명하는 방법은 어떻습니까? 방법? 문제는 n 개의 행을 위해이었다,하지만 당신은 (외관상으로 N은 N 변경하기 위해 변경하는 어떤 멍청한 놈에 대한 명확하지 비록, 당신의 예제 2) 무엇 n은 말하지 않았다
로빈 Manoli

3
이것은 임시 파일을 사용하므로 100 % util 디스크 공간에는 그다지 유용하지 않습니다. 문자 그대로 "제자리에서"수행하는 솔루션을 갖는 것이 흥미로울 것입니다.
Shai

10

sed -i '1,3d' file.txt

file.txt에서 처음 3 줄을 삭제합니다.


6

테이블 라인이 탭 문자가있는 라인 인 경우 :

grep '␉' <input_file >output_file

( 리터럴 탭 문자) 또는 동등

sed -n '/␉/p' <input_file >output_file

bash / ksh / zsh 스크립트에서 $'\t'탭을 작성할 수 있습니다 ( 예 : grep $'\t'또는) sed -n $'/\t/p'.

파일 시작 부분에서 10 줄을 제거하려면 다음을 수행하십시오.

tail -n +11 <input_file >output_file

( “11 행에서 시작”을 의미하고 1에서 꼬리 행을 의미 +11하기 때문에 10 행을 제거 해야합니다 +11) 또는

sed '1,10d' <input_file >output_file

Linux에서는 GNU sed의 -i옵션을 사용하여 파일을 적절 하게 수정할 수 있습니다.

sed -i -n '/\t/p' *.txt

또는 쉘 루프와 임시 파일을 사용할 수 있습니다.

for x in *.txt; do
  tail -n +11 <"$x" >"$x.tmp"
  mv "$x.tmp" "$x"
done

또는 파일을 제자리에 수정하지 않고 대신 다른 이름을 지정하십시오.

for x in *.txt; do
  tail -n +11 <"$x" >"${x%.txt}.data"
done

3
"tabulated"는 일반적으로 "탭 문자로 들여 쓰기"가 아니라 "테이블에 예쁜 인쇄"를 의미합니다.
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams 알고 있습니다. 인쇄 된 표는 때때로 탭 문자를 사용하므로 정렬 된 열보다 쉽게 ​​찾을 수 있습니다. 물론 Paul이 샘플 입력을 제공하면 더 나은 매처를 줄 수 있습니다.
Gilles

2

Ex 모드에서 Vim을 사용할 수 있습니다 :

ex -sc '1d5|x' file
  1. 1 첫 줄로 이동

  2. 5 5 줄을 선택하십시오

  3. d 지우다

  4. x 저장하고 닫습니다


0

에코 "a \ nb"| sed '1d'# 첫 줄 삭제

고양이 list.txt | sed '1d'> list.csv # list.txt를 읽고 첫 줄없이 list.csv를 씁니다.

다른 유용한 명령들 :

grep '^ |' # 첫 문자를 찾습니다 (pipe |)

sed 's / | // g'# 파이프 삭제

sed 's / // g'# 공간을 삭제합니다


0

백분율로

을 사용 bash하여 절대 줄 수 대신 백분율 숫자를 사용하여 파일을 정리하십시오.

sed -i -e 1,$( printf  "$((`cat php_errors.log | wc -l` * 75 /100 ))" )d php_errors.log

사본을 작성하지 않고 내부에서 컨텐츠를 삭제하므로 해당 명령이 손상 될 수 있으므로주의하십시오.

언급 된 파일에서 처음 75 %의 행을 삭제합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.