这个 sed 命令是如何工作的?

这个 sed 命令是如何工作的?

我遇到过这个从文本文件打印特定行的解决方案:

sed '123!d;q' file

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

答案1

在英语中,这个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

相关内容