한 줄 내에서 변수 문자열을 비교하는 방법

한 줄 내에서 변수 문자열을 비교하는 방법

이 문제를 해결하기 위해 grep, awk 및 sed를 사용하고 있습니다. 다음과 같은 줄이 포함된 XML이 있습니다.

<field type="float8" name="something" database_fieldname="SHORT" allowsnull="false"/>
<field type="float8" name="LONG" database_fieldname="LONG" allowsnull="false"/>

해당 값이 있는 행을 분리하고 싶습니다.이름 =그리고데이터베이스 필드 이름 =동일하다면 전체 필드를 삭제하세요.데이터베이스 필드 이름 =.예상 출력:

<field type="float8" name="something" database_fieldname="SHORT" allowsnull="false"/>
<field type="float8" name="LONG" allowsnull="false"/>

답변1

awk대략적인 솔루션:

awk '
        {match ($0, / name="[^"]*"/)
         R1 = RSTART
         L1 = RLENGTH
         match ($0, / database_fieldname="[^"]*"/)
         R2 = RSTART
         L2 = RLENGTH
         if (substr ($0, R1+7, L1-8) == substr ($0, R2+21, L2-22)) sub (substr ($0, R2, L2), "")
        }
1
' file
<field type="float8" name="something" database_fieldname="SHORT" allowsnull="false"/>
<field type="float8" name="LONG" allowsnull="false"/>

두 개의 대상 필드를 일치시키고, 해당 값을 추출하고, 비교하고, 같으면 두 번째 필드를 빈 문자열로 완전히 바꿉니다.

답변2

검색 패턴에 역참조를 사용할 수 있습니다.

sed -e 's/name="\(.*\)" database_fieldname="\1"/name="\1"/' <input>

관련 정보