명령 코드가 잘못되었습니다. - sed를 사용하여 인라인 문자 교체

명령 코드가 잘못되었습니다. - sed를 사용하여 인라인 문자 교체

저는 bash/shell 스크립트를 사용하는 데 상당히 익숙하지 않으므로 이것이 정말 간단하다면 용서해 주십시오. 디렉터리에 중첩된 인라인 파일을 바꾸려고 하는데 다음과 같은 메시지가 나타납니다.

Invalid command code .

내가 시도할 때

sed -i 's/\([^.]*\).css/\1.min.css/g' ./bobby/templates/layout.html;

오류가 발생하고 있다는 큰 직감이 있지만 ./bobby/templates/layout.html유효한 파일 경로로 다시 포맷하는 방법을 잘 모르겠습니다.

답변1

sed귀하의 버전에는 해당 옵션에 대한 접미사 인수가 필요한 것 같습니다 -i. 이는 아마도 Mac이나 FreeBSD 시스템에 있을 가능성이 높다는 의미입니다.

sed그러면 sed 스크립트는 접미어로 해석되고 파일 이름은 sed 스크립트로 해석됩니다. 따라서 Invalid command code .파일 이름의 첫 번째 문자이므로 오류 메시지가 나타납니다.

노력하다:

sed -i .bak 's/\([^.]*\)\.css/\1.min.css/g' ./bobby/templates/layout.html

이스케이프를 위해 백슬래시를 추가했습니다 .(그렇지 않으면 일치합니다).어느리터럴뿐만 아니라 문자 .)를 삭제하고 ;파일 이름 끝에서 를 제거했습니다. 같은 줄에 여러 명령이 있는 경우에만 필요합니다.

sed 스크립트는 파일을 제자리에서 편집하고 백업을 만듭니다..../layout.html.bak

또는 Perl을 사용하여 이를 수행할 수도 있습니다. 예를 들어

perl -i -p -e 's/([^.]*)\.css/$1.min.css/g' ./bobby/templates/layout.html

그런데 sed 및 Perl 버전에서 사용되는 정규 표현식은 예상보다 다양할 수 있습니다. 파일에 filename.css한 줄만 있을 가능성은 거의 없기 때문입니다 .html. 먼저 옵션 없이 테스트하겠습니다 -i.

s:(/[^.]*)\.css:$1.min.css:g슬래시 문자 바로 앞에 오는 경우에만 파일 이름을 변경하는 것과 유사한 것을 원할 것입니다 . 실제 입력 파일이 어떻게 보이는지 보지 않고서는 이보다 더 구체적으로 설명할 수 없습니다.

관련 정보