Печать 2-й и 7-й строк в файл с помощью `sed`

У меня есть каталог .txt-файлов. Для каждого я хотел бы захватить вторую и седьмую строки и добавить эти строки в другой файл, который я произвольно назвал list.index. Я не уверен, как сообщить sed о текущем имени файла, в цикле for, поэтому то, что у меня ниже, пока не работает.

#!/bin/sh for i in *.txt do sed -n -e '2p' -e '7p' list.index done 

В вашем случае вы сказали sed что печатаете 2-й и 7-й строки файла list.index , а не добавляете к ним эти строки.

Попробуй это:

 #!/bin/sh for i in *.txt do sed -n -e '2p;7p' < "$i" >> list.index done 

Он напечатает 2-ю и 7-ю строки каждого файла .txt затем добавит их в list.index .

Обратите внимание, что вы можете сказать, что sed перестает читать после того, как он прочитает 7-ю строчку, после этого нет смысла следить за чтением:

 #! /bin/sh - for i in *.txt; do sed -e 2b -e 7q -ed < "$i" done > list.index 

(или sed '7q;2!d' < "$i" короче, но немного менее разборчиво)