[英]Find and replace in bash
如何在bash
腳本中編寫簡單的查找和替換,但是替換來自運行PHP腳本。
例如,我需要找到: {{KEY}}
並替換為app.config
文件中的php -f generate_key.php
的輸出。 sed
可以做到這一點嗎?
我建議遵循這些原則,而不是上面基於sed的解決方案:
KEY="$(php -f generate_key.php)" awk '{gsub("{{KEY}}", ENVIRON["KEY"]);print;}' < app.config > app.config.new && \
mv app.config.new app.config
( 在T + 20h進行編輯以使用ENVIRON
而不是awk -v VAR=VAL
因為后者在VAL
處理轉義序列)
主要是因為它執行替換時未對PHP腳本的輸出進行任何解釋或轉換。
如果您的PHP腳本的輸出包含正斜杠,則基於sed的解決方案將失敗,並且它們還將替換您的PHP腳本的輸出中存在的各種轉義字符( \\n
s, \\t
s等),這很可能是不是你想要的。
試試這個
sed -e "s/{{KEY}}/`php -f generate_key.php`/g" app.config
這將替換字符串替換為PHP腳本的輸出。 如果要在適當位置修改app.config,請在命令行中添加選項-i
sed -i -e "s/{{KEY}}/`php -f generate_key.php`/g" app.config
正如@ je4d所觀察到的,例如,如果generate_key.php
的輸出包含正斜杠/
,則必須改用另一個定界符,例如
sed -e "s;{{KEY}};`php -f generate_key.php`;g" app.config
嘗試:
cat app.config|sed 's/{{KEY}}/something/g'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.