标题: sed -e '/^#/!b'是什么意思? [打印本页] 作者: qtdszws 时间: 2011-01-17 22:22 标题: sed -e '/^#/!b'是什么意思? sed -e '/^#/!b'执行什么动作?作者: jerryjzm 时间: 2011-01-18 16:42
是
sed -e '/^#/!d' file_name
吧
不是
sed -e '/^#/!b' file_name作者: qtdszws 时间: 2011-01-18 16:45
mysql 5.1.28 的sql目录下Makefile中
.yy.cc:
$(YACCCOMPILE) $<
if test -f y.tab.h; then \
to=`echo "$*_H" | sed \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`; \
sed -e "/^#/!b" -e "s/Y_TAB_H/$$to/g" -e "s|y\.tab\.h|$*.h|" \
y.tab.h >$*.ht; \
rm -f y.tab.h; \
if cmp -s $*.ht $*.h; then \
rm -f $*.ht ;\
else \
mv $*.ht $*.h; \
fi; \
fi
if test -f y.output; then \
mv y.output $*.output; \
fi
sed '/^#/ s|y\.tab\.c|$@|' y.tab.c >$@t && mv $@t $@
rm -f y.tab.c作者: taojie2000 时间: 2011-01-18 17:05
b 我也不太理解 来个高手详细说下作者: HH106 时间: 2011-01-18 17:10
b 无条件跳转作者: 南极雨 时间: 2011-01-18 17:29 本帖最后由 南极雨 于 2011-01-18 18:34 编辑
b label
Branch to label; if label is omitted, branch to end of script.
也就是跳转到下一个分支的标签处
b无条件跳转,相当于goto label, 如果没有标签,到脚本结尾,开始处理下一行
t 根据上一次的s///的结果,成功则跳转(无标签跳到结尾),s///失败则继续执行t label后面的代码。
T 跟t相反,s///失败是跳转,否则继续执行其后面的命令。用于tT判断的s///应在读入最新一行之后,和上一次tT命令之后。可以理解为最近的一次s///。
!b 与模式匹配上了则不进行跳转,匹配不上,进而跳转执行下一个 标签 -e处的命令!
sed -e "/^#/!b" -e "s/Y_TAB_H/$$to/g" -e "s|y\.tab\.h|$*.h|"