sed 명령을 사용하여 //를 /* */로 바꾸세요.

sed 명령을 사용하여 //를 /* */로 바꾸세요.

sed 명령에서 //를 /* */로 바꾸는 방법은 무엇입니까?

나는 시도했다:

sed -e "s/////* *//g" <<< filename

그러나 이로 인해 대체 명령 '/'에 오류 플래그가 발생합니다.

이 문제를 해결하는 방법을 아는 사람이 있나요?

답변1

$ echo '// //' | sed 's@//@/* */@g'
/* */ /* */

인용 출처 man sed:

[2addr]s/regex/교체/플래그

대체 문자열을 패턴 공간에 있는 정규식의 첫 번째 인스턴스로 바꿉니다.RE와 교체를 구분하기 위해 슬래시 대신 백슬래시 또는 개행 문자 이외의 모든 문자를 사용할 수 있습니다.. RE 및 대체에서 RE 구분 기호 앞에 백슬래시가 있으면 리터럴 문자로 사용할 수 있습니다.

답변2

sed에서는 어떤 문자도 구분 기호로 사용할 필요가 없습니다 /. 사용:

sed 's://:/* */:g' < file

// comment업데이트된 질문에 대해 인라인 주석을 블록 주석으로 바꾸려면 /* comment */다음 명령을 사용하십시오.

sed -E 's://(.*):/*\1*/:g' < file

괄호는 캡처 그룹을 정의하고 그 뒤에 참조가 옵니다 \1.

그러나 이것은 줄 단위로만 작동하므로 연속 주석 줄을 병합하려면 sed보다 더 나은 구문 분석기가 필요할 수 있습니다.

또한 이는 간단한 경우에는 작동하지만 일부 입력에서는 작동할 수 있습니다. 다음과 같은 코드에서 어떤 일이 발생할지 고려하세요.

char *url = "https://example.com";

따라서 변환 후 파일을 주의 깊게 확인하시기 바랍니다.

관련 정보