여러 파일의 시작 부분에 sed 삽입이 작동하지 않습니다

여러 파일의 시작 부분에 sed 삽입이 작동하지 않습니다

내가 우연히 만났어많은에세이를 포함한 답변:

그리고 내가 원하는 것을 할 수 있는 방법을 찾을 수 없습니다. 디렉토리에 있는 모든 파일 #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행 1을 선택하세요.

  2. i텍스트 및 줄 바꿈 삽입

  3. x저장하고 닫습니다

답변3

원하는 작업을 수행하는 몇 가지 방법은 다음과 같습니다.

  1. sed

    find . -iname "*.erb" -type f -exec \
     sed -i '' '1s/^/#encoding:utf-8\n/' {} \;
    

    확인하기 위해 BSD에 액세스할 수 없으므로 올바르게 읽힐 것이라고 sed보장할 수 없습니다 . \n단일 파일에 대해 명령을 시도하고 -i확인하는 데 첫 번째 파일이 필요하지 않습니다.

  2. find . -iname "*.erb" -type f -exec \
        perl -i -pe 'print "#encoding:utf-8\n" if $.==1;' {} \;
    
  3. 껍데기

    find . -iname "*.erb" -type f -exec \
        sh -c 'echo "#encoding:utf-8" >tmp && cat "$1" >> tmp && mv tmp "$1"' sh {} \;
    

관련 정보