sed命令如何工作?

尤金·雅玛什(Eugene Yarmash)

我遇到过用于从文本文件中打印特定行的解决方案:

sed '123!d;q' file

在这种情况下,为什么sed在输入的第一行之后不退出?

吉勒斯“别再邪恶了”

用英语来说,该sed程序的意思是:对于每一行,

  • [ 123!]如果当前行号不是123,则[ d]删除当前行并开始下一个循环(即,移至下一行);
  • 然后(但是,只有d在未执行命令的情况下,我们才到达这一点),[ q]退出而不处理任何其他行(但确实会在垂死的阵痛中打印出当前行)。

或者,如果您愿意,可以使用shell语法:

line_number=0
while IFS= read -r pattern_space; do
  line_number=$(($line_number+1))
  if [ $line_number -ne 123 ]; then       # 123!
    continue                              #   d
  fi
  echo "$pattern_space"; break            # q
  echo "$pattern_space"                   # implicit final print (never reached)
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章