주어진

주어진

sed 명령을 사용하여 다음 노드의 값을 바꾸려고 합니다.

<KeyValue key="EMPTY_SEARCH_CRITERIA" type="String" value="CS_CODE" comment="Configured empty search criteria."/>

초기 값에는 모든 문자열 값이 포함될 수 있으므로 와일드카드를 사용합니다. 예를 들어.

sed -e 's/value=.*/value="SN_CODE,CS_ID" comment="Configured empty search criteria."\/\>/g' CMS_conf.xml > tempfile
         ^        ^                                                                     ^

하지만 이 경우 comment 속성도 포함해야 합니다.

댓글 속성을 입력하지 않고 이를 수행할 수 있는 방법이 있습니까?

답변1

나는 정규 표현식의 Perl 방언을 사용할 것입니다. 사용 중인 시스템에서 사용할 수 있는 경우 sedPerl을 사용하고 있을 가능성이 높습니다.

주어진

<KeyValue key="EMPTY_SEARCH_CRITERIA" type="String" value="CS_CODE" comment="Configured empty search criteria."/>

펄 정규식

perl -i -pe 's/(value=)".*?"/\1"some_replacement_string"/g' <filename>

노트

먼저 터미널에 인쇄하여 테스트해 볼 수도 있습니다.

perl -pe 's/(value=)".*?"/\1"some_replacement_string"/g' <filename>

또는 확장명을 사용하여 백업을 생성하세요..bak

perl -i.bak -pe 's/(value=)".*?"/\1"some_replacement_string"/g' <filename>

정규식 설명:

  • (): 변수로 그룹화\1
  • ": 작은따옴표 표현이므로 따옴표는 문자 그대로 간주되므로 이스케이프 처리할 필요가 없습니다.
  • ?: 길들이기*의 경우 첫 번째 일치에서 씹는 것을 중지합니다(마지막 일치까지 씹기를 계속하지 않음). sed탐욕스럽지 않은 연산자는 지원되지 않지만 다른 답변에서 트릭을 사용할 수 있습니다 [^"]*". 이는 모두 삼키는 것을 의미합니다. 이 경우 실제로 동일한 작업을 수행하는 문자입니다.

답변2

CS_CODE를 SN_CODE,CS_ID로 구체적으로 변경하려면 다음을 사용할 수 있습니다.

's/CS_CODE/SN_CODE,CS_ID/g'

값이 다른 경우 사용할 수 있습니다

's/value=\S*\S/value="SN_CODE,CS_ID"/g'

답변3

sedHTML(또는 다른 프로그래밍 언어) 처리를 위한 최선의 선택은 아니지만 어쨌든:

sed -e 's/\(value\)="[^"]*"/\1="SN_CODE,CS_ID"/'

명확하지 않을 수 있는 두 가지 사항이 있습니다.

  • 나중에 사용할 수 있도록 패턴을 그룹화 \(합니다 .\)\1
  • [^"]*다음을 제외한 모든 문자와 일치하는 데 사용됩니다."

관련 정보