簡體   English   中英

在bash中查找並替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM