Sed 学习Bash-Configure文件
我对bash很在行,我喜欢通过查看别人的作品和下载的文件来学习,我在一个配置文件中发现了这一点Sed 学习Bash-Configure文件,sed,sh,configure,Sed,Sh,Configure,我对bash很在行,我喜欢通过查看别人的作品和下载的文件来学习,我在一个配置文件中发现了这一点 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || ech
# Name of the executable.
as_me=`$as_basename "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)$' \| \
. : '\(.\)' 2>/dev/null ||
echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
/^X\/\(\/\/\)$/{ s//\1/; q; }
/^X\/\(\/\).*/{ s//\1/; q; }
s/.*/./; q'`
有人能解释一下这是怎么回事吗?我看到很多人在使用sed命令时,使用了一大堆向前和向后的斜杠来表示替换等等,但这似乎很荒谬。首先,我肯定会建议检查一下这个命令 其次,我将介绍一些
sed
内容:
:这是正则表达式搜索的开始sed'/
:搜索行首(^.*
)并搜索任何字符(^
)的任何金额(即零或更多:
),请注意,在*
中使用[]
表示不在列表中^
:然后搜索一个斜杠,后跟一组不包含斜杠的字符(/\([^/][^/]*\)
)。[^/][^/]*
标记了以后可以引用的组。我以后再谈\(…\)
:然后搜索任意数量的斜杠,然后搜索行尾(\/*$
)$
:出现第二个未转换的斜杠标志着正则表达式的结束,以及当它找到与正则表达式匹配的行时,/
应该做的事情的开始sed
:不幸的是,我不知道大括号的确切用途。通常,它们用于对命令进行分组,但我从未在斜杠的这一部分中看到它的使用。无论如何,正如前面提到的{s//\1/;q;}
允许反向引用<代码>\1引用前两个斜杠之间的第一个(也是唯一的)分组;也就是说,sed
。[^/][^/]*
用于在完成该命令时退出q
,但由于它在大括号中,我不确定这对整个命令有何影响李>sed
sed
的工作原理。据我所知,sed
似乎正在查看一个文件路径并获取其中的一部分。例如,它被传递到some/crazy/file/location.ext
它将返回crazy
希望有帮助!确保你检查了这个链接,因为一旦掌握了窍门,它是一个非常有用的工具。哦,如果您曾经使用
sed
请使用:
或或甚至
作为分隔符!!这防止了sed的讨厌的纠察栅栏外观参见上文。它可以写成
sed ':^.*/\([^/][^/]*\)/*$:{ s::\1:; q; }
:^X/\(//\)$:{ s::\1:; q; }
:^X/\(/\).*:{ s::\1:; q; }
s:.*:.:; q'
我承认这不容易理解,但更容易阅读。这是从哪个配置文件来的?你应该改为括号,而不是旧的和过时的背景。var=$(代码)很好,因为它不是我的,我可以同意。如果您想向制造商推荐gtk-server-2.3.1,那么谷歌可能是因为需要使用尽可能多的sh
和sed
实现,才出现了可怕的外观,包括一些甚至可能早于POSIX标准的命令。可能会运行3种不同的命令:一种命令名为$as_basename
,另一种命令名为$as_expr
,最后一种方法是sed
as_basename
和as_expr
很可能分别是POSIXbasename
和expr
命令。