2012-12-05 94 views
1

我是新來的sed命令。我正在閱讀一些源代碼的構建腳本,我發現它在循環中。構建腳本中的sed命令

for x in '*.la'  
do  
sed -i -e 's|^\(libdir=.\).*\(/opt/toolchains\)|\1\2|' x  
done 

我無法理解循環正在執行的功能。任何人都可以幫忙

libdir=X[zero-or-more-chars]/opt/toolchains 

(其中X:

+0

進入'commandlinefu.com'並鍵入'sed -i -e'你會看到各種不同的例子,這些例子可以幫助你更好地理解這個概念。 –

回答

1

它遍歷了一系列在當前目錄「.la」,併爲每個文件結尾的文件中找到,它使用sed來轉換格式的行編輯內容是任何字符)轉化爲以下形式的行:

libdir=X/opt/toolchains. 

換句話說,它將刪除這些行的[zero-or-more-chars]部分。

實際上,這看起來很奇怪,因爲我期望sed命令引用$ x而不是x。我有一種感覺,你在複製/粘貼步驟中以某種方式失去了$(或者它可能只是一個bug)。

+0

這意味着如果「libdir =/var/root/opt/toolchains」,它將變爲「libdir = // opt/toolchains」。我對嗎 ?是的,那是錯字。我錯過了「$」。 –

+1

無論它是什麼,它都會盲目地保留等號後面的字符。假設它是一個主要的斜線,這是典型的,將被保留。可能更好的解釋方法是說,如果等號後面的文本是路徑名,它將刪除/ opt/toolchains上方的所有父目錄。 –