파일의 첫 줄 삭제 내용을 유지하려면 어떻게해야합니까? 나는 이것을 시도했지만 파일의

파일의 첫 줄을 삭제하고 변경 내용을 유지하려면 어떻게해야합니까?

나는 이것을 시도했지만 파일의 전체 내용을 지 웁니다.

$sed 1d file.txt > file.txt



답변

해당 명령 이후에 file.txt가 비어있는 이유는 쉘이 수행하는 순서입니다. 해당 줄에서 가장 먼저 발생하는 것은 리디렉션입니다. “file.txt”파일이 열리고 0 바이트로 잘립니다. 그 후 sed 명령이 실행되지만 그 시점에서 파일은 이미 비어 있습니다.

몇 가지 옵션이 있으며, 대부분 임시 파일에 쓰는 것이 포함됩니다.

sed '1d' file.txt > tmpfile; mv tmpfile file.txt # POSIX
sed -i '1d' file.txt # GNU sed only, creates a temporary file

perl -ip -e '$_ = undef if $. == 1' file.txt # also creates a temporary file


답변

대체로 가벼운 옵션은 첫 번째 줄을 제외한 모든 것을 ‘꼬리’하는 것입니다 (일반적으로 파일 헤더를 쉽게 제거 할 수있는 방법 일 수 있음).

# -n +2 : start at line 2 of the file.
tail -n +2 file.txt > file.stdout

@Evan Teitelman에 따르면 다음을 수행 할 수 있습니다.

tail -n +2 file.txt | sponge file.txt

임시 파일을 피하기 위해. 다른 옵션은 다음과 같습니다.

echo "$(tail -n +2 file.txt)" > file.txt

기타 등등. 마지막 테스트 :

[user@work ~]$ cat file.txt
line 1
line 2
line 3
line 4
line 5

[user@work ~]$ echo "$(tail -n +2 file.txt)" > file.txt
[user@work ~]$ cat file.txt
line 2
line 3
line 4
line 5
[user@work ~]$ 

죄송합니다 (아래 @ 1_CR 댓글 당).

printf "%s\n\n" "$(tail -n +2 file.txt)" > file.txt

[user@work ~]$ cat file.txt
line 1
line 2
line 3
line 4
line 5

[user@work ~]$ printf '%s\n\n' "$(tail -n +2 file.txt)" > file.txt
[user@work ~]$ cat file.txt
line 2
line 3
line 4
line 5

[user@work ~]$ 

sed로 돌아와서 다음을 시도하십시오.

printf '%s\n\n' "$(sed '1d' file.txt)" > file.txt

또는 아마도

echo -e "$(sed '1d' file.txt)\n" > file.txt

부작용을 피하기 위해.


답변

또한 한 번 봐 걸릴 sponge에서을
moreutils. sponge파일에 쓰기 전에 표준 입력의 쓰기 끝이 닫힐 때까지 표준 입력에서 데이터를 흡수합니다. 다음과 같이 사용됩니다.

sed '1d' file.txt | sponge file.txt


답변

이 주제는 관심이 있으므로 3 가지 방법으로 벤치 마크를 테스트합니다.

  1. sed '1d' d.txt > tmp.txt
  2. tail -n +2 d.txt > tmp.txt
  3. sed -i '1d' d.txt

대상 d.txt은 5.4GB 파일입니다.

결과를 얻으십시오 :


run 1 : sed '1d' d.txt > r1.txt
14s
run 2 : tail -n +2 d.txt > r2.txt
20s
run 3 : sed -i '1d' d.txt
88s

결론 : 가장 빠른 방법은 다음과 같습니다.

sed '1d' file.txt > tmpfile; mv tmpfile file.txt


답변

ex임시 파일이 포함되지 않은 실제 편집에 사용될 수 있습니다.

ex -c ':1d' -c ':wq' file.txt


답변

파일을 사용하여 파일에서 첫 번째 줄을 삭제하는 가장 짧고 간단한 방법 sed은 다음과 같습니다.

$ sed -i -n -e '2,$p' file.txt


답변

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

ex -s -c '1d|x' file.txt
  1. 1 첫 줄을 찾으십시오

  2. d 지우다

  3. x 저장하고 닫습니다