我是新来的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'你会看到各种不同的例子,这些例子可以帮助你更好地理解这个概念。 –