bash – 显示除文件的最后一行之外的所有内容:命令替换和标准I / O重定向

前端之家收集整理的这篇文章主要介绍了bash – 显示除文件的最后一行之外的所有内容:命令替换和标准I / O重定向前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直试图让头部实用程序显示除标准输入的最后一行之外的所有内容.我需要的实际代码是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))

这可以理解,给我一个非法的行数错误.但是至少告诉我,在将东西传递到subshel​​l /命令替换之前,头节目没有消耗标准输入,这是一种遥远的可能性,但是我还是想排除它.

echo "hello" | head -n $(cat && echo 1)

什么解释了head和wc的行为及其通过subshel​​ls的互动?谢谢你的帮助.

头是错误的工具.如果您想查看除最后一行之外的所有内容,请使用:
sed \$d

的原因

# Sample of incorrect code:
echo "hello" | head -n $(wc -l | sed -E -e 's/\s//g')

失败是wc消耗所有的输入,没有任何东西可以看到. wc从其运行的subshel​​l继承其stdin,它正在从echo的输出读取.一旦它消耗输入,它返回,然后头尝试读取数据…但它都消失了.如果要读取输入两次,则必须将数据保存在某处.

原文链接:https://www.f2er.com/bash/386391.html

猜你在找的Bash相关文章