0

我无法找出正确的语法来搜索文本文件并在找到搜索后插入新行。

我想添加

define('FS_METHOD', 'ftpext');

define('WP_DEBUG', false);

仅当后面define('WP_DEBUG', false);的行为空白时。

我的计划是在命令中使用它find来批量更新大量 wp-config.php 文件。

我没有转义字符的尝试是:

find . -name wp-config.php -exec sed 'define('WP_DEBUG', false);
i\ define('FS_METHOD', 'ftpext');' {}
4

3 回答 3

1

如果您想在 sed 中使用正则表达式匹配作为条件(或“地址”),则必须将其用斜杠括起来:

sed "/define('WP_DEBUG', false);/idefine('FS_METHOD', 'ftpext');"

请注意,我使用了双引号,因此可以在内部使用单引号而不会破坏表达式。

但是,如果仅在以下行为空时才应替换字符串,我将切换到 Perl:

#!/usr/bin/perl -p
s/^$/define('FS_METHOD', 'ftpext');/ if $previous eq "define('WP_DEBUG', false);\n";
$previous = $_;

测试它:

echo "define('WP_DEBUG', false);
non empty line.
define('WP_DEBUG', false);

previous line is empty

What about last line?
define('WP_DEBUG', false);" | 1.pl

输出:

define('WP_DEBUG', false);
non empty line.
define('WP_DEBUG', false);
define('FS_METHOD', 'ftpext');
previous line is empty

What about last line?
define('WP_DEBUG', false);
于 2013-05-16T13:06:56.813 回答
1

试试这个:

perl -pe 'if($f==1 && /^$/){print "mydata";$f=0;}if(/define\(\047WP_DEBUG\047\, false\)\;/ ) {$f=1}' your_file

你可以添加任何你想要的mydata部分。

用您的数据在下面测试:

文件

> cat temp
a
define('WP_DEBUG', false);
b
c
define('WP_DEBUG', false);

bjwebfwke

执行

> perl -pe 'if($f==1 && /^$/){print "define('FS_METHOD', 'ftpext');";$f=0;}if(/define\(\047WP_DEBUG\047\, false\)\;/ ) {$f=1}' temp
a
define('WP_DEBUG', false);
b
c
define('WP_DEBUG', false);
define(FS_METHOD, ftpext);
bjwebfwke
> 
于 2013-05-16T13:36:30.837 回答
0

这可能对您有用(GNU sed):

sed "N;s/define('WP_DEBUG', false);\n$/&define('FS_METHOD', 'ftpext');/;P;D" file
于 2013-05-17T06:40:11.070 回答