2017-11-28 1 views
1

나는 Bash를 사용하여 한 번에 여러 파일 전체를 대체하려는 동일한 CSS 변수 문자열을 포함하는 CSS 파일 내에 포함 된 특정 문자열을 어떻게 대체 할 수 있는지 알아 내려고 노력했습니다. CSS 파일 내의 특정 문자열을 대체하기 위해 각 디렉토리에서 CSS 파일의 각 인스턴스를 열어야하는 지루한 작업.여러 CSS 스타일 문자열을 sed로 대체

내 CSS 파일에서 CSS 코드의 특정 줄을 주석 처리하고 싶지만 특정 문자를 이스케이프 처리하고 해당 줄을 주석 처리 된 줄과 함께 변환하는 데 문제가 있습니다. /*outline-style: dashed;*/

outline-style: dashed; 나는 내가 지금까지 시도했지만 나를 위해 일하지 않은 것을 줄 /* */을 주석에 대해 다음뿐만 아니라 :; 문자를 탈출하는 방법을 알아낼 수 없습니다는 사용하여 다음을이었다 펄과 xargs;

find . -type f | xargs perl -e 's/outline-style dashed;/\/*outline-style dashed;*/\/g;' 

하지만이

find . -type f -exec sed -i 's/$^outline-style\: dotted\;/\/*outline-style\: dotted\;/g' *.{css} \; 

과 노력에 의해 교체의 가장 간단한 작동하는 것 나는 또한 나오지 사용하여 시도

Backslash found where operator expected at -e line 1, near "s/outline- 
style dashed;/\/*outline-style dashed;*/\" 
syntax error at -e line 1, near "s/outline-style dashed;/\/*outline- 
style dashed;*/\" 
Search pattern not terminated at -e line 1. 
xargs: perl: exited with status 255; aborting 

말하는 오류를 반환하지만이되지 않습니다 꽤 일하는, 이건 그냥 오류를 말하는 반환합니다 sed: can't read *.{css}: No such file or directory

나는 위트를 시도 hout은 거기에 *.{css}을 추가했지만 여전히 동일한 오류를 주지만 CSS 파일의 출력은 변경되지 않습니다.

shopt -s globstar 
sed -i 's/^outline-style: dashed;$/\/*outline-style: dashed;*\//' **/*.css 

또는 당신은이처럼 find 예를 편집 할 수 있습니다 : 당신이 .CSS로 끝나는 디렉토리가없는 경우

답변

1

, 당신은이를 사용할 수 있습니다

find . -type f -name '*.css' -exec sed -i 's/^outline-style: dashed;$/\/*outline-style: dashed;*\//' {} + 

참고 참으로 특정 문자 슬래시와 같이 탈출해야합니다.

+0

흠 이것들도 작동하지 않는 것 같아요. CSS 파일에 쓰는 게 아니지만, 오류를 내고 있지는 않습니다. 즉 오류가 발생하지 않았기 때문에 아무런 조치도 취하지 않았습니다. –

+1

@ user94959 라인이 정확히'outline-style : dashed;'이면, 둘 다 제대로 작동해야합니다. sed에 포함되지 않은 탭이나 무언가를 사용하고 있습니까? – PesaThe

+1

@ user94959 데이터에 DOS 스타일의 줄 끝 문자가 있으면이 작업도 실패합니다. 이 경우 파일을 유닉스 형식으로 변환하거나'sed'에'\ r' 문자를 추가해야합니다. – PesaThe

관련 문제