просмотреть определенную строку файла, обозначенного номером

17

Хорошо, это, наверное, очевидная вещь, но это ускользает от меня, так как в ней, вероятно, можно было бы сделать намного проще, чем я пока не знаю. Скажем, есть «файл», и я хочу посмотреть только то, что находится в строке «X» этого файла, каково было бы решение?

вот что я могу придумать:

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

есть ли что-нибудь еще (или любым другим способом) из стандартного набора текстовых инструментов / utils unix / gnu / linux?

    
задан XXL 24.03.2011 в 13:14
источник
  • Существенно эквивалентно sed: echo Xp | ed -s file –  A. Rex 24.03.2011 в 13:25
  • awk 'NR == X' файл –  A. Rex 24.03.2011 в 13:27

4 ответа

24

sed -n 'Xp' theFile , где X - ваш номер строки, а theFile - ваш файл.

    
ответ дан Jmoney38 24.03.2011 в 13:27
  • @matja: потому что он уже был в исходном посте. –  XXL 28.10.2011 в 10:44
  • @XXL - так? Дело в том, что это лучший ответ, поэтому его следует проголосовать как таковой. –  fig 19.12.2013 в 16:27
  • @fig, о чем вы говорите? как это лучший ответ? плакат не стал читать пост OP, который уже имел эту точную часть. Какая польза от публикации одной и той же вещи ?! –  XXL 19.12.2013 в 17:17
  • @XXL, чтобы подчеркнуть, что это простой и эффективный способ выполнения поставленной задачи –  Dan Passaro 11.10.2014 в 00:27
  • Я редко ищу ответ в вопросе, поэтому полезно иметь его как отдельный ответ, который можно проголосовать вверх или вниз относительно других ответов. +1 –  Daniel Fortunov 13.10.2017 в 08:49
6

в vi:

vi +X filename

в EMACS:

emacs +X filename

в оболочке:

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

вы можете использовать контекст grep cgrep вместо grep , чтобы увидеть некоторые строки выше и ниже соответствующей строки.

<сильные> ПРИМЕРЫ:

напечатайте только одну строку:

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

с контекстом:

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

для контроля контекста в grep check 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.
    
ответ дан user979912 22.10.2011 в 21:06
2

awk one-liner:

awk "NR==$X" file

цикл bash:

for ((i=1; i<=X; i++)); do
  read l
done < file
echo "$l"
    
ответ дан pepoluan 24.03.2011 в 13:26
1

Просто используйте vi

vi file

Если в типе файла

:X

где X - номер строки, которую вы хотите видеть

Однако файл sed -n Xp является хорошим способом, если вы действительно хотите видеть только одну строку

    
ответ дан Krrl 29.03.2011 в 20:36
  • вы можете перейти непосредственно к линии - как показывает другой ответ –  Oct 22 '11 at 19:15 22.10.2011 в 21:15