У меня есть строки вида
parts=/a,1mb,/b/c,2gb,/zee/last,-1 #general form on next line
parts=path1,size1,...,lastPath,-1
Я хочу заменить все path1,size1
кроме lastplace,-1
на newPath,newSize
, чтобы он выглядел как
parts=newPathX,newSizeX,lastPath,-1
Я понял, как это сделать, используя хотя бы один экземпляр of ',' char следующим образом
sed 's|^parts=.*,\(.*,-1\)$|parts=newPathX,newSizeX,\1|gi'
, но это ломается, если список имеет только последний путь и размер,Например, я хочу, чтобы
parts=lastPath,-1
был преобразован в
parts=newPathX,newSize,lastPath,-1
Поэтому я попытался исправить это с помощью условного выражения в bash:
egrep -i '^parts=.*,.*,-1$' $file
if [[ $? -eq 0 ]] ; then
sed 's|^parts=.*,\(.*,-1\)$|parts='$new',\1|gi' $inp
else
sed -i -e 's|^parts=|parts='$new',_gi' $file
fi
Я быЯ хотел бы знать, что такое решение sed, насколько я могу быстро понять, но awk тоже подойдет.