SEDは文字列内の文字列を置き換えます。

SEDは文字列内の文字列を置き換えます。

次のスクリプトがあります。

originalLine='<com.whatsapp.voipcalling.VideoCallParticipantViewLayout android:id="@id/video_participant_views" android:layout_width="fill_parent" android:layout_height="fill_parent"/>'

escParamToChange="android:layout_width"
value="10dip"

replacementLine=$(echo ${originalLine} | sed -E 's/'${escParamToChange}'=[^ ]*/'${escParamToChange}'="'${value}'"/')

echo ${replacementLine}

「android:layout_width」の値を「10dip」に置き換えようとしています。

うまく動作し、出力は次のとおりです。

<com.whatsapp.voipcalling.VideoCallParticipantViewLayout android:id="@id/video_participant_views" android:layout_width="10dip" android:layout_height="fill_parent"/>

しかし、「escParamToChange」を「android:layout_height」に変更すると、次のような結果が出ます。

<com.whatsapp.voipcalling.VideoCallParticipantViewLayout android:id="@id/video_participant_views" android:layout_width="fill_parent" android:layout_height="10dip"

最後の「/>」も削除されます。

機能させるには何を変更する必要がありますか?

ありがとう

ベストアンサー1

努力する

replacementLine=$(echo ${originalLine} | sed -E 's/('${escParamToChange}'=)"[^"]+"/\1"'${value}'"/')
  • \1キャプチャされたグループを置き換える('${escParamToChange}'=)(ショートカット)
  • "[^"]+""一致は「ではなく、1つ以上の文字で始まり、その後に終端値が続きます。"

「sed(GNU sed) 4.4」に適用されます。

$ originalLine='<com.whatsapp.voipcalling.VideoCallParticipantViewLayout android:id="@id/video_participant_views" android:layout_width="fill_parent" android:layout_height="fill_parent"/>'
$ value="10dip"
$ for escParamToChange in android:layout_width android:layout_height; do echo ${originalLine} | sed -E 's/('${escParamToChange}'=)"[^"]+"/\1"'${value}'"/'; done
<com.whatsapp.voipcalling.VideoCallParticipantViewLayout android:id="@id/video_participant_views" android:layout_width="10dip" android:layout_height="fill_parent"/>
<com.whatsapp.voipcalling.VideoCallParticipantViewLayout android:id="@id/video_participant_views" android:layout_width="fill_parent" android:layout_height="10dip"/>

おすすめ記事