첫 번째 줄을 제외하고 파일의 모든 내용을 덮어쓰려면 어떻게 해야 합니까?

첫 번째 줄을 제외하고 파일의 모든 내용을 덮어쓰려면 어떻게 해야 합니까?

명령 출력으로 자주 업데이트하는 CSV 파일이 있는데 헤더를 유지하고 싶습니다. Bash > file.csv구문이 이 줄을 덮어쓰는 것을 방지하는 방법은 무엇입니까?

답변1

리디렉션 대신 내부 편집을 사용하기 위한 몇 가지 옵션:

ed -s file.csv <<'EOF'
1r !some_command
1,.wq
EOF

또는 유사하게

some_command | sed -i.bak -e '1r /dev/stdin' -e 1q file.csv

AFAIK에서는 후자는 "비하인드 스토리" 임시 파일을 사용합니다.

답변2

execute command >csvfile
sed -i '1i mention the header here' csvfile

답변3

쉘이 오프셋에서 시작하는 파일을 덮어쓰도록 하는 쉬운 방법은 없습니다. 어떠한 경우에도 충돌이나 정전으로 인해 편집이 중단되면 잘린 파일이 남게 되므로 파일을 그 자리에서 편집해서는 안 됩니다.

새 파일을 만듭니다. 첫 번째 줄을 복사한 후 나머지를 작성하세요. 완료되면 새 파일을 제자리로 옮깁니다.

read -r first_line <file.csv
{
  printf '%s\n' "$first_line
  … # write the rest of the content to standard output
} >file.csv.new
mv -f file.csv.new file.csv

답변4

sed -i '2,$d'  file.csv && some_command >> file.csv

sed -i '2,$d' file.csv첫 번째 줄을 제외한 파일의 모든 내용이 삭제됩니다.

-ised에게 제자리에서 작업하라고 지시

2,$2번째 줄부터 파일 끝까지의 주소

d삭제 작업을 수행합니다.

생략하여 명령이 원하는 대로 작동하는지 시험해 볼 수 있습니다.-i

그런 다음 && some_command >> file.csv파일에 추가됩니다~하지 않는 한 sed성공적으로 클리어했습니다.

관련 정보