次のスクリプトがあります。
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"/>