Вы можете использовать группы захвата для сопоставления и замены всего, что находится между двойными кавычками и сразу же следует двойными кавычками.
Соответствующее регулярное выражение будет выглядеть примерно так: ("[^",]*")"
. Обратите внимание на две вещи: первая состоит в том, что "
сопоставляются буквально, а выражение в середине [^",]*
просто означает, что регулярное выражение будет соответствовать чему угодно, кроме "
или ,
. Это означает, что внутри сопоставленной строки не будет кавычек.
Наконец, круглые скобки представляют собой группу захвата , и мы можем ссылаться на все, что соответствует под Регексу между ()
с обратной косой чертой и номером. Например, \1
будет заменено совпадением первой группы захвата, \3
с третьей и т. Д.
Сценарий sed для того, что вам нужно, может выглядеть примерно так:
sed -re 's/("[^",]*")"/\1/g'
Посмотрите, как последняя двойная кавычка находится вне группы захвата, и она не будет заменена на \1
.
Группы захвата являются функцией расширенных регулярных выражений (ERE), поэтомуфлаг -r
необходим для их включения в sed, в противном случае он будет использовать базовые регулярные выражения (BRE).
Обратите внимание также на /g
в конце. Это необходимо, чтобы sed мог сопоставлять и заменять более одного вхождения в одной строке.
Пример:
$ cat test
"ABC-DEF-d98263","12345678","176568981","","588","ABC-DEF-11947","","GAUZE PACKING STRIPS 1/4"","","","2019-02-04T19:09:00-05:00",""","XXX","XXX","2019-02-12T23:57:48-06:00"","XXX-XXX-176568981"
$ cat test | sed -re 's/("[^",]*")"/\1/g'
"ABC-DEF-d98263","12345678","176568981","","588","ABC-DEF-11947","","GAUZE PACKING STRIPS 1/4","","","2019-02-04T19:09:00-05:00","","XXX","XXX","2019-02-12T23:57:48-06:00","XXX-XXX-176568981"