我无法找出正确的语法来搜索文本文件,并在找到搜索后插入新行。
我想添加
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');' {}
答案 0 :(得分: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);
答案 1 :(得分: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
>
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed "N;s/define('WP_DEBUG', false);\n$/&define('FS_METHOD', 'ftpext');/;P;D" file