我一直在尝试让 head
实用程序显示除最后一行标准输入之外的所有内容。我需要的实际代码类似于 cat myfile.txt | head -n $(($(wc -l)-1))
.但这没有用。我在 Darwin/OS X 上执行此操作,它没有 head -n -1
的良好语义,这会让我得到类似的输出。
这些变体都不起作用。
cat myfile.txt | head -n $(wc -l | sed -E -e 's/\s//g')
echo "hello" | head -n $(wc -l | sed -E -e 's/\s//g')
我测试了更多变体,特别是发现它有效:
cat <<EOF | echo $(($(wc -l)-1))
>Hola
>Raul
>Como Esta
>Bueno?
>EOF
3
这里有一些更简单的方法也有效。
echo "hello world" | echo $(($(wc -w)+10))
可以理解的是,这给了我一个非法的行数错误。但它至少告诉我 head
程序在将内容传递给子 shell/命令替换之前没有使用标准输入,这是一种遥远的可能性,但我无论如何都想排除这种可能性。
echo "hello" | head -n $(cat && echo 1)
这里是什么解释了 head
和 wc
的行为以及它们通过子 shell 的交互?感谢您的帮助。
最佳答案
head -n -1
将为您提供除输入的最后一行以外的所有内容。
关于bash - 让 head 显示文件的最后一行以外的所有内容 : command substitution and standard I/O redirection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18127726/