Batch file 替换为保留字符的sed语法
我很难找到正确的语法来搜索文本文件并在找到搜索后插入新行 我想补充一点Batch file 替换为保留字符的sed语法,batch-file,sed,find,exec,Batch File,Sed,Find,Exec,我很难找到正确的语法来搜索文本文件并在找到搜索后插入新行 我想补充一点 define('FS_METHOD', 'ftpext'); 之后 仅当define('WP_DEBUG',false)后的行为空 我的计划是在find命令中使用它来批量更新大量的wp-config.php文件 我在不转义字符的情况下的尝试是: find . -name wp-config.php -exec sed 'define('WP_DEBUG', false); i\ define('FS_METHOD', 'f
define('FS_METHOD', 'ftpext');
之后
仅当define('WP_DEBUG',false)后的行代码>为空
我的计划是在find
命令中使用它来批量更新大量的wp-config.php文件
我在不转义字符的情况下的尝试是:
find . -name wp-config.php -exec sed 'define('WP_DEBUG', false);
i\ define('FS_METHOD', 'ftpext');' {}
如果要在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);
试试这个:
perl -pe 'if($f==1 && /^$/){print "mydata";$f=0;}if(/define\(\047WP_DEBUG\047\, false\)\;/ ) {$f=1}' your_file
您可以在mydata
part中添加任何需要的内容
使用您的数据进行以下测试:
文件
执行
> 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
>
这可能适用于您(GNU-sed):
标题所说的是什么保留字符?我想,既然脚本不起作用,括号、引号和分号可能会引起问题?太好了,Perl脚本工作得很好,但是,我不知道如何覆盖通过脚本传递的文件?@chrismcb:您可以将-I~
开关添加到perl,以便在保存备份时更改文件。非常好,脚本可以工作,并且在我的整个使用过程中:find-名称wp-config.php-exec wp_ftp_check.sh{}\代码>
> 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
>
sed "N;s/define('WP_DEBUG', false);\n$/&define('FS_METHOD', 'ftpext');/;P;D" file