Bash 构建脚本中的sed命令

Bash 构建脚本中的sed命令,bash,shell,sed,build-process,Bash,Shell,Sed,Build Process,我是sed指挥部的新手。我正在阅读一些源代码的构建脚本,在其中发现了这个for循环 for x in '*.la' do sed -i -e 's|^\(libdir=.\).*\(/opt/toolchains\)|\1\2|' x done 我无法理解这个for循环的功能。任何人都可以提供帮助。它正在迭代当前目录中以“.la”结尾的一系列文件,对于找到的每个文件,它正在使用sed编辑内容以转换表单的行: libdir=X[zero-or-more-chars]/op

我是sed指挥部的新手。我正在阅读一些源代码的构建脚本,在其中发现了这个for循环

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

我无法理解这个for循环的功能。任何人都可以提供帮助。

它正在迭代当前目录中以“.la”结尾的一系列文件,对于找到的每个文件,它正在使用sed编辑内容以转换表单的行:

libdir=X[zero-or-more-chars]/opt/toolchains 
libdir=X/opt/toolchains. 
(其中X为任何字符)转换为以下形式的行:

libdir=X[zero-or-more-chars]/opt/toolchains 
libdir=X/opt/toolchains. 
换句话说,它删除了这些行中的[零个或多个字符]部分


实际上,这看起来有问题,因为我希望sed命令引用$x,而不是x。我感觉您在复制/粘贴步骤中丢失了$(或者可能只是一个bug)。

它在当前目录中以“.la”结尾的一系列文件上进行迭代,对于找到的每个文件,它使用sed编辑内容以转换表单的行:

libdir=X[zero-or-more-chars]/opt/toolchains 
libdir=X/opt/toolchains. 
(其中X为任何字符)转换为以下形式的行:

libdir=X[zero-or-more-chars]/opt/toolchains 
libdir=X/opt/toolchains. 
换句话说,它删除了这些行中的[零个或多个字符]部分


实际上,这看起来有问题,因为我希望sed命令引用$x,而不是x。我有一种感觉,你在复制/粘贴步骤中不知何故丢失了美元(或者可能只是一个bug).

进入
commandlinefu.com
并键入
sed-i-e
您将看到各种示例,这些示例将帮助您更好地理解这个概念。进入
commandlinefu.com
并键入
sed-i-e
您将看到各种示例,这些示例将帮助您更好地理解这个概念。这意味着如果“libdir=/var/root/opt/toolschains”,它将更改为“libdir=//opt/toolschains”。我说得对吗?是的,那是打字错误。我漏掉了“$”。它会盲目地保留等号后面的字符,不管它是什么。假设它是一个前导斜杠,这是典型的,它将被保留。可能更好的解释方法是,如果等号后面的文本是路径名,它将删除/opt/toolschains上面的所有父目录。这意味着如果“libdir=/var/root/opt/toolschains”,它将更改为“libdir=/opt/toolschains”。我说得对吗?是的,那是打字错误。我漏掉了“$”。它会盲目地保留等号后面的字符,不管它是什么。假设它是一个前导斜杠,这是典型的,它将被保留。可能更好的解释方法是,如果等号后面的文本是路径名,那么它将删除/opt/toolschains上面的所有父目录。