한 줄의 sed 명령을 사용하여 줄 끝에 바꾸고 추가합니다.

한 줄의 sed 명령을 사용하여 줄 끝에 바꾸고 추가합니다.

다음과 같은 줄이 있습니다

 // Testing this

sed 명령을 사용하여 각 줄의 //를 /*(중간에 있는 문장 또는 단어)*/로 바꾸려고 합니다.

그래서 다음과 같아야합니다

/* Testing this */

첫 번째 부분은 부르기 쉽습니다.

sed 's#//#/*#'

그러나 두 번째 부분에서는 이 솔루션을 시도했습니다.

sed를 사용하여 줄 끝에 단어 추가

이 기능을 사용하려고 하면 -e"종료되지 않은 명령" 오류가 발생했습니다. 그런 다음 세미콜론을 사용하여 하나로 만들려고 시도했습니다.

's#//#/*#;#//#s#/$#*/#'

//그러나 그것이 하는 일은 첫 번째 부분( a 로 대체 /*)만 수행되고 두 번째 부분( a 를 */같은 줄 끝에 배치)이 아닌 것처럼 보입니다 .

내가 뭘 잘못했나요? 어떤 조언이라도 대단히 감사하겠습니다.

답변1

어때요?

$ cat testfile
// Testing this
foobar
$ sed 'sx//\(.*\)x/*\1 */x' testfile
/* Testing this */
foobar
$
  • sx//: 다음을 포함하는 행 검색//
  • \(.*\)x: 줄의 나머지 부분을 캡처 그룹 1에 넣습니다.
  • /*\1 */x: 줄의 나머지 부분을 /*(주석 시작, C 스타일)로 바꾸고 캡처 그룹 1의 내용( 으로 참조됨 \1), 그 다음 */(주석 끝, C 스타일)으로 바꿉니다.

답변2

또 다른 접근 방식: 주석과 정확히 일치하는 조건으로 검색 및 바꾸기를 수행합니다.

sed '\!//! {s!!/*!; s!$! */!}' file

내용은 다음과 같습니다.

  • 라인에 패턴이 포함되어 //있으면
    • 일치하는 텍스트를 다음으로 바꾸십시오./*
    • 그런 다음 줄 끝의 빈 문자열을 다음으로 바꿉니다.*/

관련 정보