什么是Linux中的sed b命令?

时间:2015-12-15 07:21:21

标签: sed

我只是想知道Linux中b的{​​{1}}命令是什么。例如:

sed

2 个答案:

答案 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命令。