emulare la coda con sed


8

Ho un mini-sistema con un numero solo limitato di file binari ( bash, cp, cat, sed, ...). Non ho il tailcomando e mi chiedo se potrei emulare la funzionalità della codased

cat foo.txt | tail -n 10

So che posso stampare le righe 1-10 con sed cat foo.txt | sed -n '1,10p', ma come stamperei le ultime 10 righe?


2
Ci sono molti utili script sed in una riga di comando di cui potresti aver bisogno: sed one-line
Slyx

Risposte:


15

Potresti fare qualcosa del genere:

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

sed -e :a -e '$q;N;11,$D;ba' fooper abbinare la domanda.
Slyx,

Non ho idea di come funzioni, ma funziona perfettamente. Molte grazie.
Martin Vegter,

Qualcuno potrebbe spiegare questo meraviglioso comando? Sto cercando di avere un comando che mostri l'inizio e la fine di un documento e penso che questo comando possa aiutare, ma ho bisogno di aggiungere la parte principale. In effetti, il comando che stavo cercando è semplicemente: sed -e '1,11p' -e :a -e '$q;N;11,$D;ba' Ma mi piacerebbe ancora capire la parte di coda !!!
Franck,

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

ma se non hai tac, puoi usare solo sed in questo modo:

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

0

È exprdisponibile con il tuo sistema? Quindi puoi provare a valutare il numero di riga desiderato dopo aver contato il numero totale di righe nel file.

Ho creato un file chiamato tmpcontenente i numeri da 1 a 20 in ogni riga.

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

Certo, puoi usare wc -l, se disponibile.

Il comando per calcolare il numero totale di righe nel file viene preso da sed one liners . Tuttavia, non ho verificato se funziona anche con file vuoti.

PS Se exprnon è disponibile, puoi usare i numeri di sottrazione in Bash come mostrato di seguito:

cat tmp | sed -n $((nlines-9)),"$nlines"p
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.