1行内で変数文字列を比較する方法

1行内で変数文字列を比較する方法

この問題を解決するために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つのターゲットフィールドを一致させ、対応する値を抽出し、比較し、等しい場合は、2番目のフィールドを空の文字列に完全に置き換えます。

答え2

検索パターンに逆参照を使用できます。

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

関連情報