我一直试图让头部实用程序显示除标准输入的最后一行之外的所有内容.我需要的实际代码是cat myfile.txt |的行head -n $(($(wc -l)-1)).但那没有办法.我在达尔文/ 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))
这可以理解,给我一个非法的行数错误.但是至少告诉我,在将东西传递到subshell /命令替换之前,头节目没有消耗标准输入,这是一种遥远的可能性,但是我还是想排除它.
echo "hello" | head -n $(cat && echo 1)
什么解释了head和wc的行为及其通过subshells的互动?谢谢你的帮助.
头是错误的工具.如果您想查看除最后一行之外的所有内容,请使用:
sed \$d
的原因
# Sample of incorrect code: echo "hello" | head -n $(wc -l | sed -E -e 's/\s//g')
失败是wc消耗所有的输入,没有任何东西可以看到. wc从其运行的subshell继承其stdin,它正在从echo的输出读取.一旦它消耗输入,它返回,然后头尝试读取数据…但它都消失了.如果要读取输入两次,则必须将数据保存在某处.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。