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

Если у меня есть следующий текст внутри файла (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 
  • Группируйте все строки на основе первого столбца, затем вычислите общее количество второго и третьего столбцов
  • Преобразование / proc / cpuinfo в JSON в linux bash
  • сравнить два файла, получить идентичный список
  • sed или grep, чтобы получить только значения без цифр
  • Заменить определенный текст в фигурных скобках
  • Извлеките строки из файла containg From <str1> To <str2>
  • Рекурсивно найти все файлы с именем «file.txt» и выполнить команду sed
  • Чтобы заменить% меток, но не \% в Perl Regex
  • Удалите последний символ перед другим символом
  • Как узнать содержимое файла XML с помощью Unix Sed / Awk?
  • Удалить символ из столбца CSV
  • Linux и Unix - лучшая ОС в мире.