head
ユーティリティを入手して、標準入力の最後の行以外のすべてを表示しようとしました。私が必要とした実際のコードは、cat myfile.txt | head -n $(($(wc -l)-1))
の行に沿ったものです。しかし、それはうまくいかなかった。私はダーウィン/ OS Xにこれをやっています。これは、同じ出力を得たhead -n -1
という素晴らしいセマンティクスを持っていません。ファイルの最後の行以外のすべてを表示するには、コマンド置換と標準I/Oリダイレクト
これらの変形のいずれも機能しません。
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
プログラムは、サブシェル/コマンド置換、遠方の可能性に物を渡す前に標準入力を消費していないが、とにかくそれを排除したいと思っていると私に言います。ここでサブシェルを通じてhead
とwc
の行動とそれらの相互作用を説明して何
echo "hello" | head -n $(cat && echo 1)
?ご協力いただきありがとうございます。
ありがとう@ウィリアム。私は 'sed'を使うことができましたが、この質問では' head 'を使ったアプローチがなぜうまくいかないのかを具体的に理解しようとしています。 – gkb0986
+1なぜ地球上でこれが落とされたのですか? 'sed'スクリプトは、正しい、移植可能な解決策であり、説明に欠陥がないことがわかります。 – tripleee
downvoteは合理的でした。それは、答えがまったく問題にならなかった「sed」解決策だけであるときに発生しました。 –