Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 替换为保留字符的sed语法_Batch File_Sed_Find_Exec - Fatal编程技术网

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