sedで尾をエミュレートする


8

私は(バイナリの限られた数のミニシステムを持ってbashcpcatsed...、)。tailコマンドがないので、テール機能をエミュレートできるかどうか疑問に思っていますsed

cat foo.txt | tail -n 10

sed cat foo.txt | sed -n '1,10p'で1行目から10行目までを印刷できることはわかっていますが、最後の10行をどのように印刷しますか?


2
1つのコマンドラインには、必要になる可能性がある多くの便利なsedスクリプトがあります
。sed1

回答:


15

あなたはこのようなことをすることができます:

sed -e :a -e '$q;N;11,$D;ba'

sed -e :a -e '$q;N;11,$D;ba' foo質問と一致します。
Slyx 2014年

どのように機能するかはわかりませんが、完全に機能します。どうもありがとう。
Martin Vegter 2014年

誰かがこの素晴らしいコマンドを説明できますか?ドキュメントの先頭末尾を示す1つのコマンドを探しています。このコマンドは役立つと思いますが、ヘッドパーツを追加する必要があります。実際、私が探していたコマンドは単純です: sed -e '1,11p' -e :a -e '$q;N;11,$D;ba' しかし、私はまだ尾の部分を理解したいと思います!!!
フランク

0
tac foo |  sed -n '1,10p' | tac

しかし、tacがない場合は、次の方法でsedのみを使用できます。

sed -n '1!G;h;$p' foo | sed -n '1,10p' | sed -n '1!G;h;$p'

0

あるexprシステムで利用可能?次に、ファイル内の合計行数をカウントした後、目的の行番号を評価してみることができます。

tmp各行に1から20までの数字を含むという名前のファイルを作成しました。

nlines=$(cat tmp | sed -n '$=')
cat tmp | sed -n $(expr $nlines - 9),"$nlines"p
11
12
13
14
15
16
17
18
19
20

もちろん、wc -l可能な場合はを使用できます。

ファイルの総行数を計算するコマンドは、sed one linersから取得されます。ただし、空のファイルでも動作するかどうかは確認していません。

PS exprが利用できない場合、以下に示すようにBashで減算数を使用できます。

cat tmp | sed -n $((nlines-9)),"$nlines"p
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.