использование sed для поиска соответствия в файле и замены его содержимым другого файла

So does a X server start in a display or a screen?

Я не знаю, как сказать это иначе, чем раньше; во всех смыслах и целях X-сервер — это дисплей («дисплей» как концепция X Window, которую, как я понимаю, мы здесь обсуждаем ). X-сервер не запускается на дисплее, он является дисплеем. Вы можете представить это как «X-сервер запускает дисплей» и «дисплей содержит один или несколько экранов».

Переменная DISPLAYможет сбивать с толку, поскольку, как вы говорите, она может указывать больше, чем отображение X.

Which one is correct?

Диаграмма; см. объяснение ниже.

Does a display server start in a display or a screen or a monitor?

В документации X Window «сервер отображения» является синонимом X-сервера, поэтому применимо вышесказанное.

Следует учитывать, что документация X Window была написана давным-давно, в то время, когда виртуальные дисплеи (мало использовались, если вообще использовались ), и когда были установлены несколько -мониторов. были сложными и часто включали несколько X-экранов, а иногда даже несколько X-серверов. Таким образом, в документации X экран обычно является монитором. Однако быстро стало очевидно, что разбивать несколько мониторов на несколько экранов раздражает, и как только видеокарты стали способны обрабатывать несколько мониторов как единое целое, модели использования изменились, так что экраны X, как правило, покрывали несколько мониторов.

Is a framebuffer associated with a display or a screen or a monitor?

«Фреймбуфер» — несколько расплывчатый термин, имеющий несколько определений. В контексте комментария, который вы цитируете, он связан с экраном, и вы можете увидеть это с помощью Xvfb:, если вы скажете ему использовать сопоставленные файлы памяти -для своих кадровых буферов и определите несколько экранов, вы посмотрите, как он использует один файл фреймбуфера на экран.

-1
15.06.2020, 21:21
2 ответа

Предполагая, что файлы являются допустимыми файлами JSON, т. е. файл content.jsonвыглядит так

[
{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]}
]

или подобное

{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]}
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]}

и этот config.jsonвыглядит как

[
{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]}
]

или подобное

{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]}
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]}

... затем jqможно использовать для простого объединения двух массивов в требуемую структуру JSON:

$ jq -s flatten content.json config.json
[
  {
    "interval": 1,
    "expired": 3,
    "ignored": [
      ".git",
      ".p4"
    ]
  },
  {
    "interval": 2,
    "expired": 4,
    "ignored": [
      ".git",
      ".p4"
    ]
  },
  {
    "interval": 3,
    "expired": 3,
    "ignored": [
      ".git",
      ".p4"
    ]
  },
  {
    "interval": 4,
    "expired": 4,
    "ignored": [
      ".git",
      ".p4"
    ]
  }
]

Команда flattenв jqобъединяет записи верхнего -уровня массива. Массив представляет собой массив, состоящий из данных из каждого файла в виде двух отдельных элементов массива.

Используйте jq -cдля получения более компактного вывода:

$ jq -cs flatten content.json config.json
[{"interval":1,"expired":3,"ignored":[".git",".p4"]},{"interval":2,"expired":4,"ignored":[".git",".p4"]},{"interval":3,"expired":3,"ignored":[".git",".p4"]},{"interval":4,"expired":4,"ignored":[".git",".p4"]}]
1
18.03.2021, 23:27

Я предлагаю вам сделать это с помощьюjq(см. другой ответ ).

Однако, если вам действительно нужно использовать sed и если в файле конфигурации нет начальных и конечных квадратных скобок, как показано, тогда (с GNUsed):

sed -i -e '$rconfig.json' -e '$a]' -e '$d' content.json
0
18.03.2021, 23:27

Теги

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