Как удалить строки, начинающиеся с определенных строк

Есть ли способ удалить строки, начинающиеся с определенных строк.

У меня есть этот код youtube-dl

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E

, и его результат подобен этому

[ f2]

Я хочу удалить все строки, начиная с [youtube], [ffmpeg] и [avconv], и вот так

[youtube:playlist] PL1C815DB73EC2678E: Downloading webpage
[download] Downloading playlist: Less than 1 minute
[youtube:playlist] playlist Less than 1 minute: Collected 4 video ids (downloading 4 of them)
[download] Downloading video 1 of 4
[download] Destination: _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a

[download]   0.4% of 231.51KiB at  6.10KiB/s ETA 00:30
[download]   1.1% of 231.51KiB at 27.07KiB/s ETA 00:10
[download]   4.0% of 231.51KiB at 19.24KiB/s ETA 00:04
[download]   6.5% of 231.51KiB at 75.06KiB/s ETA 00:03
[download]  13.4% of 231.51KiB at 98.22KiB/s ETA 00:03
[download]  28.7% of 231.51KiB at 81.40KiB/s ETA 00:02
[download]  61.7% of 231.51KiB at 91.56KiB/s ETA 00:01
[download]  86.2% of 231.51KiB at 82.96KiB/s ETA 00:00
[download] 100.0% of 231.51KiB at 73.21KiB/s ETA 00:00
[download] 100% of 231.51KiB in 00:02
WARNING: Your copy of avconv is outdated, update avconv to version 10-0 or newer if you encounter any errors.
WARNING: Your copy of avconv is outdated, update avconv to version 10-0 or newer if you encounter any errors.
Deleting original file _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a (pass -k to keep)
[download] Downloading video 2 of 4
etc..
etc..
.
.

я попробовал этот метод, но его отображающая ошибка, и это только предполагают для удаления [youtube]

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | sed '^/[youtube]/ d' 
1
задан 14 June 2015 в 16:29

3 ответа

Я предлагаю использовать grep -vE следующим образом:

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | grep -vE '^\[(youtube|ffmpeg|avconv)\]'

Из man grep:

-v, --invert-match
              Invert the sense of matching, to select non-matching lines.  (-v
              is specified by POSIX.)



-E, --extended-regexp
              Interpret  PATTERN  as  an extended regular expression (ERE, see
              below).  (-E is specified by POSIX.)

Используется флаг -E чтобы избежать экранирования квадратных скобок. Без флага -E вы должны избегать квадратных скобок с обратным слэшем, например grep -vE '\[youtube\]\|\[ffmpeg\]\|\[avconv\]' Edit:

Поскольку вы запросили awk, вот один из них с awk:

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | awk '{if ($0~/^\[youtube\]/||/^\[ffmpeg\]/||/^\[avconv\]/||/^WARNING/) next;print}'

4
ответ дан 23 May 2018 в 19:50
  • 1
    [F1] и ] должны быть экранированы. С помощью опции -E (расширенная опция регулярного выражения) вы можете избежать экранирования (, ) и | в команде: grep -vE '\[(youtube|ffmpeg|avconv)\]'. Что касается «начального требования», ^ должно быть добавлено. – Lekensteyn 14 June 2015 в 16:40
  • 2
    @Lekensteyn хороший момент. Я добавлю, что – Sergiy Kolodyazhnyy 14 June 2015 в 16:40
  • 3
    @Serg не работает. при выполнении он показывает > и мигающий курсор. может быть проблема с синтаксисом – potholiday 14 June 2015 в 16:46
  • 4
    @potholiday не хватало одной цитаты в конце. Исправлено все и добавлена ​​версия awk. Пожалуйста ознакомтесь – Sergiy Kolodyazhnyy 14 June 2015 в 16:47
  • 5
    Скрипт grep не отличается от исходного кода, никаких изменений вообще. awk я пробовал вот так youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | awk '{if(/[youtube]/||/[ffmpeg]/) $0="";print}' удаляет все, кроме warning строк – potholiday 14 June 2015 в 16:53

Использование Perl:

< inputfile perl -pe 's/^\[(youtube|ffmpeg|avconv)\].*$//' > outputfile

Чтобы напрямую разобрать вывод youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E, выведите его вывод в команду без перенаправления содержимого inputfile:

`youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | perl -pe 's/^\[(youtube|ffmpeg|avconv)\].*$//' > outputfile` 
] < inputfile: перенаправляет содержимое inputfile на perl stdin > outputfile: перенаправляет содержимое perl stdout на outputfile -p: помещает while (<>) { [...] } цикл вокруг скрипта и печатает каждую обработанную строку -e: читает скрипт из аргументов

Поломка сценария Perl:

< inputfile: перенаправляет содержимое inputfile на perl stdin /: запускает шаблон > outputfile: перенаправляет содержимое perl 'stdout на outputfile \[: соответствует символу [ -p: помещает цикл while (<>) { [...] } вокруг скрипта и печатает каждую обработанную строку youtube: соответствует строке youtube -e: читает скрипт из аргументов ffmpeg: соответствует строке ffmpeg |: отделяет третью допустимую строку avconv: соответствует строке avconv ): прекращает группировку допустимых строк \] ]: соответствует символу ] .*: соответствует любому числу любого символа $: ma tches конец строки /: останавливает шаблон / запускает заменяющую строку /: останавливает заменяющую строку
1
ответ дан 23 May 2018 в 19:50
  • 1
    вы можете отредактировать команду, чтобы включить канал из команды OP youtube-dl. Другие могут не понимать. В противном случае, я тестировал его с входным файлом с текстом из сообщения OP, похоже, работает, поэтому +1 – Sergiy Kolodyazhnyy 14 June 2015 в 17:37
  • 2
    Спасибо @Serg, я видел, что вы обновили свой, так что +1 на вашем – kos 14 June 2015 в 17:46

Используйте grep -v следующим образом:

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | grep -v '^[youtube]' | grep -v '^[ffmpeg]' | grep -v '^[avconv]'
1
ответ дан 23 May 2018 в 19:50

Другие вопросы по тегам:

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