Может быть, это то, что вы хотите:
sed "s/\([0-9]\)\"\([^;]\)/\1''\2/g"
Т.е.: найти двойные кавычки ("
) после числа ([0-9]
), но не ставить точку с запятой ([^;]
), и заменить его двумя одинарными кавычками.
Edit:
Я могу продлить свою команду (сейчас она становится довольно длинной):
sed "s/\([0-9]\)\"\([^;]\)/\1''\2/g;s/\([^;]\)\"\([^;]\)/\1\'\2/g;s/\([^;]\)\"\([^;]\)/\1\'\2/g"
Поскольку вы используете SunOS, я думаю, вы не можете использовать расширенные регулярные выражения (sed -r
)? Поэтому я сделал это так: первая команда s
заменяет все дюймы "
на ''
, вторая и третья s
одинаковы. Они заменяют все "
, которые не являются прямыми соседями ;
, на один '
. Я должен сделать это дважды, чтобы иметь возможность заменить второй "
, например, "L"
, поскольку между "
есть только один символ, и этому символу уже соответствует \([^;]\)
. Таким образом, вы также замените ""
на ''
. Если у вас есть """
или """"
и т. Д., Вам нужно поставить еще один (но только один) s
.