我只是想知道Linux中b
的{{1}}命令是什么。例如:
sed
答案 0 :(得分:2)
b
命令stands for branching:无条件分支到标签。标签可以省略(如在您的示例中),在这种情况下,下一个循环开始。
请注意,在大多数情况下,使用此命令意味着您可能最好使用awk,Perl或Python等实际编程语言进行编程。
答案 1 :(得分:0)
在POSIX sed
和GNU sed
- 以及sed
的其他变体中 - b
命令跳转到脚本中的标签,或者没有标签name,到脚本的末尾。这是一个无条件的跳跃。还有条件跳跃;那是t
。并使用:label
制作标签。
在问题中的脚本环境中,b
没用。如果模式匹配,它将转到脚本的末尾,就像没有匹配时一样。
有关t
命令有用的示例,请考虑数据文件(data
):
Be very, very, very, very, very, very scared of sed scripts with branches.
现在考虑这些sed
脚本的输出:
$ sed 's/very, very/very/' data
Be very, very, very, very, very scared of sed scripts with branches.
$ sed 's/very, very/very/g' data
Be very, very, very scared of sed scripts with branches.
$ sed -e ':label' -e 's/very, very/very/g' -e 't label' data
Be very scared of sed scripts with branches.
$
确保您了解s///g
修饰符的作用以及结果的原因。
我去了我的$HOME/bin
目录,发现了97个使用sed
的脚本,包括一些非常复杂的sed
块。我只找到一个使用rmemptysubdirs
标签和分支的脚本(sed
):
# Remove empty directories from paths
find "$@" -type d -print |
sed -ne 'p
:b
s%/[^/]*$%%
p
t b' |
sort -ur |
xargs rmdir 2>/dev/null
这里的sed
脚本会转换包含以下内容的行:
/absolute/path/name/for/directory
成:
/absolute/path/name/for/directory
/absolute/path/name/for
/absolute/path/name
/absolute/path
/absolute
请注意,该脚本使用标签b
,而不是b
命令。