我知道这个问题已经被回答过好几次了,但我不知道如何将它用于我的项目。
我有几个 php 文件,想在第 11 行和第 12 行之间添加一个新字符串。这是我要添加的字符串
exec('/var/www/scripte/autostandby.sh > /dev/null 2>/dev/null &');
我想这是要走的路(对于单个文件,对于多个我将使用 *.php 而不是文件):
sed '12i\
exec('/var/www/scripte/autostandby.sh > /dev/null 2>/dev/null &');
' file.php
我得到什么:
[1] 29234
bash: $');\n': command not found
所以我猜 bash 只是运行 exec 命令或其他命令。
如何添加包含空格和类似内容的“长”字符串; ) , ' 这似乎弄乱了命令?
ps:添加“”或“”不会欺骗小马。
奖金:
我还需要在第 11 行中“附加”一些内容:
exec('/var/www/streams/taketv.sh');
对此
exec('/var/www/streams/taketv.sh > /dev/null 2>/dev/null &');
如果可能的话,适用于所有 .php 文件。总是11号线;唯一改变的是“taketv.sh”到“abc.sh”或类似的东西。
这是第一次出现 " '); " 以这种组合显示,所以我尝试了这样的方法(仅针对 1 个文件作为测试):
sed -i "s/');/ > /dev/null 2>/dev/null &');" TakeTV.php
我想我需要使用 mikeserv 所说的。我尝试过,但没有成功。
sed -i 's\
'\'');/'\''/'\'' > /dev/null 2>/dev/null &');'\''
我的计划是将“旧词”和“新词”设置为闭引号,猜猜我没有正确应用它!
答案1
您必须使用多种类型的引号或转义它们:
sed -i "12iexec('/var/www/scripte/autostandby.sh > /dev/null 2>/dev/null &');" *.php
奖金:
sed -i "s|exec('/var/www/streams/taketv.sh');|exec('/var/www/streams/taketv.sh > /dev/null 2>/dev/null \&');|"
答案2
sed '12i\
exec('\''/var/www/scripte/autostandby.sh > /dev/null 2>/dev/null &'\'');
' file.php
你必须引用整个事情。
您的问题是您试图在带引号的字符串中插入引号。这是可行的,但你必须引用报价。
command 'begin quoted arg'\''
close quotes
backslash quote the apostrophe
open quotes again
'\'' end quoted arg'
不过,你也可以不用这些:
sed -e'11s|.)[^)]*$| >/dev/null 2>/dev/null&|p' \
-e'11s|www.*sh|www/scripte/autostandby.sh|' <in >out
不过,如果您确实使用a
pend 或i
nsert 或c
hange,那么最好按照您在问题中尝试执行的操作。这些命令被指定为需要在命令和命令之间使用换行符分隔符文本他们所采取的论点。