我遇到过这个从文本文件打印特定行的解决方案:
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