簡體   English   中英

全局替換Shell腳本不起作用

[英]Global substitution shell script not working

我有一個類似的shell腳本:

for fl in /home/dr/*.txt; do
mv $fl $fl.old
sed 's#$1#$2#g' $fl.old > $fl
rm -f $fl.old
done

我像./script.sh find replace一樣運行它,但是什么也沒發生,也沒有輸出。 為什么是這樣?

這可能對您有用(GNU sed):

sed -i "s#$1#$2#g" /home/dr*.txt

您遇到的問題是sed命令周圍的單引號不允許插值。

問題在於您使用的是單引號而不是雙引號。 sed使用單引號直接解釋字符串(即,它將搜索字符串$1 ,而不是第一個參數)。

以下是您嘗試執行的功能版本。 請注意,我已經用sed的“就地”編輯代替了臨時文件的使用。

for fl in /home/dr/*.txt
do
  sed -i "s#$1#$2#g" $fl
done

但是, 您可以單行處理所有內容

sed -i "s#$1#$2#g" /home/dr/*.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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