내가 우연히 만났어많은에세이를 포함한 답변:
- OSX의 sed는 특정 라인에 삽입됩니다.
- https://stackoverflow.com/questions/14846304/sed-command-error-on-macos-x
- https://stackoverflow.com/questions/4247068/sed-command-failing-on-mac-but-works-on-linux
- https://stackoverflow.com/questions/16266281/how-to-add-text-to-the-beginning-of-all-files-in-a-folder
그리고 내가 원하는 것을 할 수 있는 방법을 찾을 수 없습니다. 디렉토리에 있는 모든 파일 #encoding:utf-8
의 시작 부분에 (재귀적으로) 삽입 해야 합니다. .html.erb
이 명령을 사용해 보았습니다.
find . -iname "*.erb" -type f -exec sed -ie "1i \#encoding:utf-8" {} \;
하지만 다음과 같은 오류가 발생합니다.
sed: 1: "1i #encoding:utf-8": i 명령 끝에서 \ 뒤에 추가 문자
답변1
그 자리에서 파일 편집OSX sed, 빈 확장자를 설정해야 합니다.
$ sed -i '' '1i\
#encoding:utf-8' filename
그런 다음 개행 문자가 필요합니다 i\
. 이는 다음으로 인해 발생합니다.POSIX sed.
오직GNU sed텍스트와 명령을 같은 줄에 삽입할 수 있습니다.
sed
동시에 여러 파일을 처리하는 것도 가능하므로 -exec command {} +
다음과 같은 형식을 사용하시면 됩니다.
$ find . -iname "*.erb" -type f -exec sed -i '' '1i\
#encoding:utf-8' {} +
답변2
Ex 모드에서 Vim을 사용할 수 있습니다:
ex -sc '1i|#encoding:utf-8' -cx file
1
행 1을 선택하세요.i
텍스트 및 줄 바꿈 삽입x
저장하고 닫습니다
답변3
원하는 작업을 수행하는 몇 가지 방법은 다음과 같습니다.
sed
find . -iname "*.erb" -type f -exec \ sed -i '' '1s/^/#encoding:utf-8\n/' {} \;
확인하기 위해 BSD에 액세스할 수 없으므로 올바르게 읽힐 것이라고
sed
보장할 수 없습니다 .\n
단일 파일에 대해 명령을 시도하고-i
확인하는 데 첫 번째 파일이 필요하지 않습니다.펄
find . -iname "*.erb" -type f -exec \ perl -i -pe 'print "#encoding:utf-8\n" if $.==1;' {} \;
껍데기
find . -iname "*.erb" -type f -exec \ sh -c 'echo "#encoding:utf-8" >tmp && cat "$1" >> tmp && mv tmp "$1"' sh {} \;