저는 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
슬래시 문자 바로 앞에 오는 경우에만 파일 이름을 변경하는 것과 유사한 것을 원할 것입니다 . 실제 입력 파일이 어떻게 보이는지 보지 않고서는 이보다 더 구체적으로 설명할 수 없습니다.