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.