bash - 让 head 显示文件的最后一行以外的所有内容 : command substitution and standard I/O redirection

标签 bash unix pipe

我一直在尝试让 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)

这里是什么解释了 headwc 的行为以及它们通过子 shell 的交互?感谢您的帮助。

最佳答案

head -n -1 将为您提供除输入的最后一行以外的所有内容。

关于bash - 让 head 显示文件的最后一行以外的所有内容 : command substitution and standard I/O redirection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18127726/

相关文章:

node.js - Node 冲突 : Nodejs -v works, 但不是 Node -v

bash - 使用 root 运行脚本的某些部分,使用普通用户运行其他部分

bash - 用于检查三个变量是否相同的 unix shell 脚本

c - 调试劣质进程

c++ - 子进程被满管道阻塞,无法在父进程中读取

windows - Windows 管道用于进程间通信的主要缺点是什么?

python : Split string separated by a pipe symbol "|"

bash - Bash 中的嵌套引号

bash - 符号链接(symbolic link)在创建后立即损坏

macos - 在 macOS 上使用查找时出现 "Illegal option"错误