我想问一下是否可以删除两个字符串之间的所有字符串,即使是在不同的行吗?
这是原始文件:
<?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/'
答案 0 :(得分:1)
使用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,
);
答案 1 :(得分:1)
默认情况下,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