2012-12-05 97 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上方的所有父目录。 –