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

Ваша ситуация является, по моему скромному мнению, аналогичной той, обрисованной в общих чертах в вопросе о CentOS.

Таким образом, решением является возможно то же: Переустановить python, затем переустановите yum затем сделайте yum clean all && yum makecache и впоследствии yum update.

0
11.01.2014, 18:35
2 ответа

В Вашем случае Вы сказали 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.

4
28.01.2020, 02:21
  • 1
    Это работало как очарование. Я вижу теперь, когда я могу использовать $i для именования файла в цикле. И я могу сделать>> list.index для определения файла для печати к.Спасибо. –  Dylan Kinnett 11.01.2014, 19:20

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

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

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

0
28.01.2020, 02:21
  • 1
    В то время как это 7q;2!d гений pieve кода, интересно, почему никто не сделал очевидное и уезжает далеко for цикл при помощи опции -s: sed -sn '2p;7p' *.txt > list.index –  Philippos 27.03.2017, 19:00
  • 2
    @Philippos, отметьте это -s нестандартное расширение GNU. Вопреки использованию подходов q, это также считало бы файлы полностью (мимо 7-й строки).См. также awk с nextfile для немного большего количества портативного подхода. (Вам также было бы нужно sed -sn ... ./*.txt или sed -sn -- '...' *.txt с GNU sed если POSIXLY_CORRECT не находится в среде). –  Stéphane Chazelas 27.03.2017, 19:06
  • 3
    Спасибо, хороший для знания! man страница обычно говорит, о котором опции и команды являются расширениями гну, но она не говорит так для -s. Кроме того, это все еще работает с опцией --posix.Странно. –  Philippos 27.03.2017, 19:18
  • 4
    @Philippos, POSIX не запрещает реализациям поддержку a -s опция. POSIX не передает под мандат реализации для возврата ошибки, когда приложения (сценарии/пользователи) передают опцию, которая не указана, таким образом, нет никакой причины --posix должен влиять на то поведение. Сценарий, который использует -s не было бы совместимо/портативно, поскольку POSIX не указывает ту опцию. –  Stéphane Chazelas 27.03.2017, 19:23
  • 5
    @Philippos, Вы правы. Я должен был проверить руководство, я принял --posix совпал бы с передачей POSIXLY_CORRECT в среде. Обратите внимание, что POSIX не указывает a --posix опция, так, чтобы сама опция была расширением GNU. –  Stéphane Chazelas 28.03.2017, 10:29

Теги

Похожие вопросы