텍스트 파일 시작 부분에 특정 형식의 콘텐츠를 추가해야 합니다. 나는 조사했다Bash에서 여러 텍스트 파일의 시작과 끝에 텍스트를 추가하는 방법, 하지만 내 상황에 어떻게 적응해야 할지 모르겠습니다.
암호
printf 'Anything\tyou\twant\tto\tadd' 0a . x | ex printf.csv
예상 출력
$ head -n 1 printf.csv;
Anything you want to add
참고: 저는 printf
해결책을 선호합니다.
답변1
의 경우 ex
다음과 같을 것입니다.
printf '%b\n' 0a 'Anything\tyou\twant\tto\tadd' . x | ex -s printf.csv
또는:
printf '0a\nAnything\tyou\twant\tto\tadd\n.\nx\n' | ex -s printf.csv
매개변수에 의해 인식되는 이스케이프 시퀀스는 %b
형식 매개변수의 이스케이프 시퀀스와 다릅니다. 전자는 표준 echo
이고 후자는 표준 C와 유사합니다(많은 printf
구현에서 이를 확장하지만). 그것과 별 차이는 없지만 , (적어도 이식성을 원한다면) \t
매개변수에 이를 작성해야 합니다 .\11
\011
%b
또 다른 옵션은 확장을 위해 %s
ksh93 스타일 따옴표를 사용하는 것입니다 .$'...'
\t
printf '%s\n' 0a $'Anything\tyou\twant\tto\tadd' . x | ex -s printf.csv
지원되는 경우(적어도 ksh93, zsh, bash, FreeBSD sh, busybox ash) 이러한 $'...'
인용문은 일반적으로 형식 매개변수에서와 같이 표준 C 이스케이프(확장 포함)를 지원합니다 printf
( %b
또는echo
답변2
printf
옵션이 아닌 첫 번째 인수로 형식 문자열을 전달합니다. 첫 번째 매개변수가 와 같은 형식 지정자를 사용하지 않으면%s
나머지 매개변수는 사실상 쓸모가 없습니다. 따라서 이스케이프 문자가 해석되는 첫 번째 인수를 사용하려면\t
나머지 텍스트도 여기에 맞아야 합니다.이 답변은 다음과 같이 말합니다.
0a
"0행 뒤에 텍스트 추가"(즉, 1행 앞에)를 의미합니다. 다음 줄은 0번 줄 뒤에 "추가"되는 리터럴 텍스트입니다..
줄 자체의 마침표( )는 추가할 텍스트를 끝냅니다.0a
와야 해앞으로추가할 텍스트입니다.
따라서 다음과 같습니다.
printf '0a\nAnything\tyou\twant\tto\tadd\n.\nx\n' | ex printf.csv
예:
% printf '0a\nAnything\tyou\twant\tto\tadd\n.\nx\n' | ex printf.csv
"printf.csv" [New file]
"printf.csv" [New file] 1 line, 25 characters
% cat printf.csv
Anything you want to add
답변3
cat
명령을 사용하면 됩니다 . conCAT 파일과 함께 사용하도록 설계되었습니다.
test.txt
다음 내용이 포함된 파일이 있다고 가정해 보겠습니다 .
Test file
Here it is
다음과 같이
printf
및로 시작하는 텍스트를 추가 할 수 있습니다 .cat
printf "Some fancy text\n" | cat - test.txt
Some fancy text
Test file
Here it is
출력을 다른 파일로 리디렉션하고 마지막으로 이전 파일 위치에 저장할 수 있습니다(이 경우).
printf "Some fancy text\n" | cat - test.txt > /tmp/insertTestFile && mv /tmp/insertTestFile test.txt
이것은 단지 개념 증명일 뿐입니다. 실제 시나리오에서는 다음 제한 사항을 고려해야 합니다.
- 고정된 이름을 가진 디렉토리에 파일을 생성하는
/tmp
것은 좋지 않습니다 .tempfile
필요한 경우 명령을 사용하여 파일을 생성하고 해당 이름을 변수에 저장하는 것을 고려하십시오. - 다른 파일 시스템에서 사용하면
mv
파일이 복사됩니다. - 위의 솔루션은 새 파일을 생성하고 해당 권한 및 acl과 함께 이전 파일을 삭제합니다.
내 목표는 초보자가 이해하기 쉬운 간단한 솔루션을 보여주는 것입니다. 이 답변에 댓글을 달고 오해의 소지가 있는 점을 지적해주신 모든 분들께 감사드립니다.
추신. 내가 가장 좋아하는 방법은 다음과 같습니다.sed -i '1s/^/Added text\n/' file.txt