Перевод строковых правил iptables в nftables

awk-решение

$ awk '/create_table/,/created_at/&&!/precision:/' schema.rb
  create_table "things", id: :serial, force: :cascade do |t|
    t.string "other_column"
    #...
    t.datetime "created_at"
  create_table "users", id: :serial, force: :cascade do |t|
    t.citext "email"
    #...
    t.datetime "created_at", precision: 0
  end
$

Ни один из приведенных ниже способов не дает точно того, что вам нужно, но я добавлю их, на случай, если они будут каким-то образом полезны.

решение sed, которое печатает строку таблицы create _и соответствие

Найдите строку таблицы create _, если она найдена, сохраните ее в буфере хранения 'h'. Ищите созданный _с указанием точности, если он найден, игнорируйте его. Ищите созданный _в одиночку, если найдете, распечатайте.

$ sed -n '/create_table/h;/created_at.*precision:/d;/created_at/{H;g;p}' schema.rb
  create_table "things", id: :serial, force: :cascade do |t|
    t.datetime "created_at"
$

awk-решение, которое печатает строку таблицы create _и соответствие

Если вы специально хотите создать строку таблицы _для совпадения, вы можете использовать

$ awk '/create_table/{t=$0}/created_at/&&!/precision:/{print t"\n"$0}' schema.rb
  create_table "things", id: :serial, force: :cascade do |t|
    t.datetime "created_at"
$

awk-решение, печатающее таблицу

Немного дальше: если вам нужны только имена таблиц, внутри которых есть совпадающая строка, вы можете использовать

$ awk '/create_table/{t=$2}/created_at/&&!/precision:/{print substr(t,2,length(t)-3)}' schema.rb
things
$
1
25.06.2021, 10:44
0 ответов

Теги

Похожие вопросы