텍스트를 sed로 대체하고 원본 텍스트의 일부를 유지하십시오


20

변환하려고합니다

<id>1</id>
<Name>ENTERPRISE RESOURCE PLANNING</Name>

에:

<column name="id">1</column>
<column name="Name">ENTERPRISE RESOURCE PLANNING</column>

작업에 가장 적합한 도구는이라고 가정 sed하지만 원본 텍스트의 일부를 교체 부분에 유지하는 방법을 알 수 없습니다.

만약 내가한다면:

$ sed -i 's/<.*>.*<.*>/<column name="\\1">\\2<\/column>/g' filename.xml

출력은 다음과 같습니다.

<column name="\1">\2</column>
<column name="\1">\2</column>

또는에서 비슷한 작업을 수행하면 다음과 vi같이 출력됩니다.

<column name=""></column>
<column name=""></column>

어떻게 그렇게 그 수 \1\2원래 값으로 다시 교체된다?

답변:


21

다음과 같은 그룹을 사용할 수 있습니다.

$ sed -i 's/<\(.*\)>\(.*\)<.*>/<column name="\1">\2<\/column>/g' filename.xml

아마도 RE에 대해 가장 혼란스러운 부분은 다양한 구문 풍미가 있다는 것입니다.

예를 들어 sed 및 vim 은 메타 정규식() 을 얻기 위해 인용해야하는 기본 정규식을 사용 합니다.

확장 정규 표현식 (예를 들어, AWK, egrep을 덜) 당신은 인용 할 필요가 ()문자 그대로의 의미를 얻을 수 있습니다. 다른 메타 문자와 비슷한 차이점이 있습니다.

BRE ()의미론 의 근거 는 대부분의 입력이 C 코드 인 경우 메타 사용을 위해 괄호를 인용하는 것이 더 실용적이라는 것입니다.


이것은 실제로 처음 시도했지만 (and 및 )문자를 피하지 않았습니다 . 어리석은 질문이지만 왜 필요한가요?
Mike

1
@ 마이크, 좋은 질문-답변을 업데이트했습니다.
maxschlepzig
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.