如何比较一行内的变量字符串

如何比较一行内的变量字符串

我正在用 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>

相关内容