2015-12-15 53 views
1

我在Mac和Ubuntu的工作,所以我要讓我的腳本工作,同時支持Mac和Ubuntu,但在這兩個系統sed -i的工作方式不同:如何讓sed -i在Mac和Ubuntu上都能工作?

在Ubuntu中,它應該是:

sed -i'' 's/Alt/Dog/g' /tmp/example.txt 

在Mac,它應該是:

sed -i '' 's/Alt/Dog/g' /tmp/example.txt 

回答

1

做出同樣的-i符號工作,GNU都sed(Ubuntu的,Linux的)和BSD sed鍵(Mac OS X),你必須:

  1. 總是提供一個(非空的)備份後綴。
  2. 將後綴附加到-i選項。

這樣:

sed -i.bak 's/Alt/Dog/g' /tmp/example.txt 

將與sed兩種變體正常工作,創建備份文件/tmp/example.txt.bak並覆蓋原來的文件/tmp/example.txt與修改後的輸出。 (請注意具有多個鏈接或符號鏈接的文件。)

您不能在同一命令行中使用空後綴(無備份)。在GNU上,空字符串連接到-i選項(概念上 - 如您在問題中所示);在BSD上,空字符串必須是單獨的參數。從來沒有兩個人見面。

相關問題