Попробуйте
replacementLine=$(echo ${originalLine} | sed -E 's/('${escParamToChange}'=)"[^"]+"/\1"'${value}'"/')
\1
заменяет захваченную группу('${escParamToChange}'=)
(ярлыком)"[^"]+"
соответствует значению, начинающемуся с "
, за которым следует один или несколько символов, отличных от -" -, за которыми следует закрывающий"
Работает над "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"/>
В этом случае вы можете использовать xargs
вместо cat
. Из соображений безопасности я предлагаю использовать нулевые -выходные данные с разделителями для find
find filename -name '*.txt' -print0 | sort -z | xargs -0 cat > combined.txt
Что он делает:
C.txt A.txt B.txt
A.txt B.txt C.txt
cat A.txt B.txt C.txt