sed 또는 기타 도구를 사용하여 정규식 일치 항목을 어떻게 수정할 수 있나요?

sed 또는 기타 도구를 사용하여 정규식 일치 항목을 어떻게 수정할 수 있나요?

파일의 텍스트를 조작해야 합니다. )앞에 쉼표가 있는 각 숫자 뒤에 닫는 괄호를 추가 해야 합니다 . – ,– 예를 들어,

  • ,4   ➜,4)
  • ,15,15)

나는 이것을 하기 위한 올바른 방법을 찾으려고 노력하고 있습니다 sed. 다음을 시도했는데 1자리 숫자에서는 작동하지만 2자리 숫자로 확장되지 않는 것 같습니다. 따라서 위의 첫 번째 줄은 괜찮지만 두 번째 줄은 그렇지 않습니다.

sudo sed 's/,\([0-9]\)/,\1)/g'파일 이름

그런 다음 다음 두 자리 숫자를 시도했습니다.

sudo sed 's/,\([0-9]([0-9]?\)/,\1)/g'파일 이름

이것은 아무 작업도 수행하지 않습니다. 오류 메시지는 표시되지 않지만 파일은 변경되지 않은 상태로 유지됩니다. 필수 번호와 두 번째 선택 번호를 검색한 다음 대체 텍스트로 이동하는 올바른 방법은 무엇입니까? 아직 이 작업을 완료해야 합니다.

  • ,15,15)

어떤 조언이라도 대단히 감사하겠습니다.

답변1

거의 다 왔습니다. 다음을 시도해 보세요.

sudo sed 's/,\([0-9]\{1,2\}\)/,\1\)/g' filename

귀하의 명령 외에도 \{1,2\}이전 정규식과 1~2회 일치하는 명령(예: 최소 1회에서 최대 2회)을 추가했습니다.

\([0-9]\{1,2\}\)설명하다:

  • [0-9]0에서 9 사이의 단일 숫자와 일치합니다.
  • {1,2}이전 정규식과 한 번, 최대 두 번 일치합니다. 따라서 하나의 일치는 필수이고 두 번째 일치는 선택 사항입니다(원하는 대로).
  • ()나중에 참조할 수 있도록 정규식 그룹이 생성됩니다.
  • 또한 문자 그대로 처리되지 않도록 모든 확장 정규식 구문 앞에 "\"를 사용한다는 점에 유의하세요. -rgnu 와 함께 스위치(확장 정규식)를 사용할 수 있으며 sed, 이 경우 다음과 같이 작성할 수 있습니다.

    sudo sed -r 's/,([0-9]{1,2})/,\1\)/g' filename
    

편집하다: 쉼표 뒤의 숫자(적어도 하나 이상)를 일치시키려면 다음을 수행할 수 있습니다.

sudo sed 's/,\([0-9]\{1,\}\)/,\1\)/g' filename

또는 더 간단하게:

sudo sed 's/,\([0-9]\+\)/,\1\)/g' filename

관련 정보