Удалить все строки между двумя строками - PullRequest
0 голосов
/ 05 декабря 2018

Я хотел бы спросить, возможно ли удалить все строки между двумя строками даже в другой строке?

Вот исходный файл:

<?php
$CONFIG = array (
  'trusted_domains' =>
  array (
    0 => '192.168.0.32',
  ),
  'datadirectory' => '/var/www/html/files/data',
  'overwrite.cli.url' => 'http://192.168.0.44/files',
  'dbtype' => 'mysql',
  'dbport' => '',
  'installed' => true,
  'loglevel' => 2,
  'maintenance' => false,
);

Что я ожидаю:

<?php
$CONFIG = array (
  'trusted_domains' =>
  array (

  ),
  'datadirectory' => '/var/www/html/files/data',
  'overwrite.cli.url' => 'http://192.168.0.44/files',
  'dbtype' => 'mysql',
  'dbport' => '',
  'installed' => true,
  'loglevel' => 2,
  'maintenance' => false,
);

Я хочу очистить все внутри доверенных доменов.

Что я пробовал:

sed -e 's/\(trusted_domains\).*\(\),\)/\1\2/'

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

По умолчанию sed работает только построчно.Есть несколько команд и опций, с помощью которых вы можете работать с несколькими строками.Например, если ваш sed поддерживает параметр -z, а ввод не содержит символ ASCII NUL, вы можете сделать это:

$ sed -zE 's/(trusted_domains[^(]+\()[^)]+/\1/' ip.txt
<?php
$CONFIG = array (
  'trusted_domains' =>
  array (),
  'datadirectory' => '/var/www/html/files/data',
  'overwrite.cli.url' => 'http://192.168.0.44/files',
  'dbtype' => 'mysql',
  'dbport' => '',
  'installed' => true,
  'loglevel' => 2,
  'maintenance' => false,
);

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


В Perl есть возможность отбрасывать весь входной контент независимо от присутствующих символов:

perl -0777 -pe 's/trusted_domains[^(]+\(\K[^)]+//' ip.txt
0 голосов
/ 05 декабря 2018

Может быть проще использовать perl:

perl -0777 -pe 's/(trusted_domains.*=>\s*array\s*\()[\s\S]*\),/$1\n  ),/' file.php

<?php
$CONFIG = array (
  'trusted_domains' =>
  array (
  ),
  'datadirectory' => '/var/www/html/files/data',
  'overwrite.cli.url' => 'http://192.168.0.44/files',
  'dbtype' => 'mysql',
  'dbport' => '',
  'installed' => true,
  'loglevel' => 2,
  'maintenance' => false,
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...