명령 출력으로 자주 업데이트하는 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
첫 번째 줄을 제외한 파일의 모든 내용이 삭제됩니다.
-i
sed에게 제자리에서 작업하라고 지시
2,$
2번째 줄부터 파일 끝까지의 주소
d
삭제 작업을 수행합니다.
생략하여 명령이 원하는 대로 작동하는지 시험해 볼 수 있습니다.-i
그런 다음 && some_command >> file.csv
파일에 추가됩니다~하지 않는 한 sed
성공적으로 클리어했습니다.