Shell-Script

在文件的特定行中插入文本?帶有特殊字元

  • October 3, 2016

我知道這已經被回答了好幾次,但我不知道如何在我的項目中使用它。

我有幾個 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 &');'\''    

我的計劃是將“舊詞”和“新詞”設置為封閉引號,我猜我沒有正確應用它!

您必須使用幾種類型的引號或轉義它們:

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 \&');|" 
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

不過,如果您確實使用了append 或insert 或change,那麼最好按照您在問題中嘗試的方式這樣做。這些命令被指定為在命令和它們採用的文本參數之間需要一個換行符。

引用自:https://unix.stackexchange.com/questions/245350