我是新來的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:
我是新來的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:
它遍歷了一系列在當前目錄「.la」,併爲每個文件結尾的文件中找到,它使用sed來轉換格式的行編輯內容是任何字符)轉化爲以下形式的行:
libdir=X/opt/toolchains.
換句話說,它將刪除這些行的[zero-or-more-chars]部分。
實際上,這看起來很奇怪,因爲我期望sed命令引用$ x而不是x。我有一種感覺,你在複製/粘貼步驟中以某種方式失去了$(或者它可能只是一個bug)。
這意味着如果「libdir =/var/root/opt/toolchains」,它將變爲「libdir = // opt/toolchains」。我對嗎 ?是的,那是錯字。我錯過了「$」。 –
無論它是什麼,它都會盲目地保留等號後面的字符。假設它是一個主要的斜線,這是典型的,將被保留。可能更好的解釋方法是說,如果等號後面的文本是路徑名,它將刪除/ opt/toolchains上方的所有父目錄。 –
進入'commandlinefu.com'並鍵入'sed -i -e'你會看到各種不同的例子,這些例子可以幫助你更好地理解這個概念。 –