2015-11-13 227 views
0

爲了在替換字符串中插入換行符,並且還想匹配我希望替換的多行字符串,我一直在試圖在此sed命令中使用各種變體。但是當我嘗試時,它或者不起作用,或者在使用\n\r時創建^MGNU sed換行符/替換字符串中的換行符

我使用GNU的sed用的zsh:

find ./ -type f -exec sed -i "s/<?php echo \$var_one;?>/<?php echo \$var_one;?>\n\n/g" {} \; 

find ./ -type f -exec sed -i 's/<?php echo \$var_one;?>/<?php echo \$var_one;?>\n\n/g' {} \; 

有沒有辦法用SED要做到這一點,還是我做錯了什麼?

回答

0

我假設你有一個文件

<?php echo $var_one;?>/<?php echo $var_one;?> 

即是$ var而不是\$var

find -type f -exec sed 's#\(<?php echo \$var_one;?>/<?php echo \$var_one;?>\)#\1\n#g' {} \; 

代替你用單引號雙引號圍繞您的sed statment

使用另一張例如我使用分隔符#。如果您使用/,則會發生錯誤,因爲/處於您的模式中。

+0

我不明白。什麼確切證實了換行符?我假設你的例子中只有一個。在文件中,我有var_one一次,但我想用自己和一兩個換行符來替換它。 – Dogbert

+0

換行符是一個元字符,它由sed識別。如果你想用一個以上的新行將「\ 1 \ n」替換爲「\ 1 \ n \ n」..好吧...因爲你有一個變量被取代..然後用雙引號替換單引號。之所以我使用單引號是因爲某些字符是由shell而不是sed來解釋的。在我身邊似乎沒有問題 – repzero