기본적으로 나는 이것을 실행했습니다.
sed -i '/s/icap_infos/icap_servers/g' *
대신에:
sed -i 's/icap_infos/icap_servers/g' *
명령에서 "s" 앞에 슬래시가 있는 것을 확인하세요.
이제 내 모든 소스 파일에는 파일 전체에 이상한 텍스트 문자열이 흩어져 있습니다. 어떻게 해결할 수 있나요?
답변1
/s/
문자가 포함된 모든 줄과 일치하는 정규식 주소입니다 s
. GNU sed에서 itext
표준 확장
i\
text
저것나text
지정된 줄 뒤에 삽입합니다. 따라서 명령은 cap_infos/icap_servers/g
모든 s
.
원본 파일에 그러한 파일이 없다고 가정하면 다음을 사용할 수 있습니다.
sed -i.old '\:^cap_infos/icap_servers/g$:d' *
도착하다디엘레테 라인이 cap_infos/icap_servers/g
정확히 일치합니다. 패턴 자체에 기본 구분 기호가 포함되어 있으므로 :
대체 구분 기호( 에서 도입됨)를 사용하는 것에 유의하세요 . 현재 파일이 작동하지 않아 다른 것을 시도해야 할 경우를 대비해 접미사를 붙여 백업됩니다 .\:
/
.old
앞으로는 sed 명령을 건조하게 실행하는 습관을 들이세요아니요 -i
먼저 백업을 만들고/하거나 -i.bak
일반 대신 사용하세요 -i
.
답변2
은 주소로 해석 되므로 /s/
다음 명령은 포함에만 적용됩니다 s
. 다음 명령은 i
다음 텍스트를 삽입합니다 cap_infos/icap_servers/g
.
해야 할 세 가지:
cap_infos/icap_servers/g
의도적 으로 행만 포함했을 가능성은 거의 없으므로sed '/^cap_infos\/icap_servers\/g$/d'
다음을 사용하여 행을 제거할 수 있습니다.주소뭔가 삭제하세요d
)- 예상되는 변화를 만들어라
-i
나중에 옵션을 사용하기 전에 항상 변경 사항을 확인하는 방법을 알아보세요.