Удалить последнюю запятую в шаблоне

Если у меня есть следующий текст внутри файла (somefile.txt):

CREATE TABLE "table_name" ( "id" int(11) unsigned NOT NULL, "some_field" varchar(10), ); CREATE TABLE "another_table" ( "id" int(11) unsigned NOT NULL, "some_other_field" varchar(10), ); 

Я хочу удалить последнюю запятую в каждой инструкции, чтобы она стала:

 CREATE TABLE "table_name" ( "id" int(11) unsigned NOT NULL, "some_field" varchar(10) ); CREATE TABLE "another_table" ( "id" int(11) unsigned NOT NULL, "some_other_field" varchar(10) ); 

Я использовал регулярное выражение \,$\n\) но я не могу заставить это работать с sed , которое бросает:

 sed: -e expression #1, char 23: Unmatched ) or \) 

когда я использую:

 sed -i -e 's/\,$\n\)/)/g' somefile.txt 

2 Solutions collect form web for “Удалить последнюю запятую в шаблоне”

Если синтаксис файла везде, как в примерах, вы можете использовать

 sed -i -n -e '1h;1!H;${g;s/\,\n);/\n);/g;p}' somefile.txt 

Объяснение:

 1h # copy first line the hold buffer 1!H # not first line -> append to the hold buffer ${ # execute at the end g # copy hold buffer back to pattern buffer s/ ... / # multiline replacement in pattern buffer p # print pattern buffer } 

(см. также http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/ )

Таким образом, весь файл читается, сохраняется и изменяется в памяти, если файл слишком большой для этого, нужно выбрать другой способ.

 sed 'N;s/,\n)/\n)/;P;D' file 

или для GNU sed

 sed -z 's/,\n)/\n)/g' file 

или awk

 awk ' f{ if(!/);/) print "," else print "" f=0 } /,$/{ sub(",$", "") printf $0 f=1 next } 1' file 
  • sed - найти строку и добавить
  • добавление трех файлов CSV
  • Вставить строку после сопоставления строки в sshd внутри pam.d
  • подстановка строки с помощью sed
  • Как написать сценарий sed для удаления чисел из строки?
  • Разделить текстовый файл на строки с фиксированным числом слов
  • Как заменить определенную строку с помощью sed или awk на основе команды run
  • Замена строки во всех файлах, найденных grep. Не могу заставить его работать
  • Как удалить строку, если строка является единственной вещью на линии
  • Сортировка некоторых строк в файле
  • Копирование / переименование нескольких файлов с использованием регулярного выражения (сценарий оболочки)
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.