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";
따라서 변환 후 파일을 주의 깊게 확인하시기 바랍니다.