パターンの最後のカンマを削除

パターンの最後のカンマを削除

ファイル(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

ベストアンサー1

例のように、ファイルの構文がどこにでもある場合は、次のものを使用できます。

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/)

これにより、ファイル全体がメモリから読み取られ、保存され、変更されます。ファイルが大きすぎる場合は、別のアプローチを選択する必要があります。

おすすめ記事