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

Eug*_*ash 12 sed

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

sed '123!d;q' file
Run Code Online (Sandbox Code Playgroud)

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

Gil*_*il' 20

在英语中,这个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
Run Code Online (Sandbox Code Playgroud)