パイプを使わずにファイルの最後のn行で単語を見つけるためにgrepを使用したいと思います。
grep <string> filename
ファイル名から文字列を検索できます。しかし、ファイルの最後のN行から文字列を検索したいと思います。パイプを使わずに検索するコマンドはありますか?
ベストアンサー1
シェルがそれをサポートしている場合(zsh
、、、、bash
の一部の実装ksh
)、次のものを使用できます。プロセスの交換
grep <pattern> <(tail -n5 yourfile.txt)
ここで、-n5は最後の5行を取得することを意味します。
同様に、
grep <pattern> <(head -n5 yourfile.txt)
yourfile.txtの最初の5行が検索されます。
説明する
簡単に言えば、置き換えられたプロセスはgrepが期待するファイルになりすます。プロセス置換の利点の1つは、diff
この例に示すように、複数のコマンドの出力を他のコマンドへの入力として使用できることです。
diff -y <(brew leaves) <(brew list)
これによりパイプ(
|
)文字が削除されますが、各置換文字は実際にはパイプラインの作成1。
1少なくともksh93
Linuxでは|
いいえパイプを使用しますが、ソケットペアを使用してください。プロセスの交換open
パイプを使用してください(ソケットは使用できません)。
$ ksh93 -c '読み取りリンク<(:)' パイプ: [620224] $ksh93 -c ': 読み取りリンク /proc/self/fd/0' ソケット: [621301]