2011-03-24 5 views
17

Bien, esto es probablemente una cosa evidente, pero se me escapa, ya que probablemente podría hacerse de una manera mucho más simple que yo no conozco, hasta ahora. Digamos que hay un "archivo" y quiero ver solo el número de línea "X" de ese archivo, ¿cuál sería la solución?ver una línea particular de un archivo denotado por un número

Esto es lo que ocurre:

head -X < file | tail -1 
sed -n Xp < file 

¿hay algo más (o cualquier otra forma) del conjunto estándar de Unix// Linux texto-tools/herramientas GNU?

+3

Esencialmente equivalente al 'sed' one:' echo Xp | ed -s archivo' –

+2

'awk 'NR == X' archivo' –

Respuesta

2

awk de una sola línea:

awk "NR==$X" file 

bucle bash:

for ((i=1; i<=X; i++)); do 
    read l 
done < file 
echo "$l" 
24

sed -n 'Xp' theFile, donde X es su número de línea y theFile es su archivo.

+0

¿por qué se ha bajado este valor? esta es la forma más portátil, simple y eficiente. uno ni siquiera necesita las comillas. – matja

+1

@matja: porque ya estaba en la publicación original. – XXL

+1

@XXL - ¿entonces? El punto es que es la mejor respuesta, por lo que debe votarse como tal. – fig

1

Sólo tiene que utilizar vi

vi file 

Cuando en el tipo de archivo

:X 

donde X es el número de línea que quiere ver

Sin embargo, el archivo Xp -n sed es una de buena manera si realmente solo quieres ver una línea

+0

puede ir directamente a la línea, como sugiere la otra respuesta –

6

en vi:

vi +X filename 

en Emacs:

emacs +X filename 

en la cáscara:

nl -ba -nln filename| grep '^X ' 

puede utilizar grep contexto cgrep en lugar de grep para ver algunas líneas por encima y por debajo de la línea de juego ..


EJEMPLOS:

de impresión sólo que una línea:

$ nl -ba -nln active_record.rb | grep '^111 ' 
111  module ConnectionAdapters 

con el contexto:

$ nl -ba -nln active_record.rb | grep -C 2 '^111 ' 
109  end 
110  
111  module ConnectionAdapters 
112   extend ActiveSupport::Autoload 
113  

para el control de contexto en grep cheque man grep:

Context Line Control 
     -A NUM, --after-context=NUM 
       Print NUM lines of trailing context after matching lines. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given. 

     -B NUM, --before-context=NUM 
       Print NUM lines of leading context before matching lines. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given. 

     -C NUM, -NUM, --context=NUM 
       Print NUM lines of output context. Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given. 
Cuestiones relacionadas