Como deletar linhas começando com certas strings

5

Existe uma maneira de deletar linhas que começam com certas strings.

Eu tenho esse código youtube-dl

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

e seu resultado é assim

[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
[youtube] KNLwsqzFfNg: Downloading webpage
[youtube] KNLwsqzFfNg: Extracting video information
[youtube] KNLwsqzFfNg: Downloading DASH manifest
[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
[ffmpeg] Correcting container in "_1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a"
WARNING: Your copy of avconv is outdated, update avconv to version 10-0 or newer if you encounter any errors.
[avconv] Destination: _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.mp3
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
[youtube] wTvXkMpJflk: Downloading webpage
[youtube] wTvXkMpJflk: Extracting video information
[youtube] wTvXkMpJflk: Downloading DASH manifest

Desejo excluir todas as linhas que começam com [youtube] , [ffmpeg] e [avconv] e sejam assim

[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..
.
.

Eu tentei esse método, mas está mostrando erro e só suponho que apague [youtube]

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | sed '^/[youtube]/ d' 
    
por potholiday 14.06.2015 / 15:29

4 respostas

8
sed -i '/\[youtube\]/d' /path/to/file

excluirá linhas contendo "[youtube]".

Como um comando, você pode combinar padrões como

sed -i '/\[youtube\]\|\[ffmpeg\]\|\[avconv\]/d' /path/to/file

Ou diretamente do seu comando

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 \
 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | 
    sed '/\[youtube\]\|\[ffmpeg\]\|\[avconv\]/d' > output.txt

Isto irá gravar o resultado em um arquivo output.txt.

Se você quiser excluir linhas que não contenham apenas [youtube] , mas começar com [youtube] , adicione ^ ao padrão, como sed '/^\[youtube\]/d' .

Mas no seu caso, isso não importa.

    
por Pilot6 14.06.2015 / 15:36
4

Sugiro usar grep -vE da seguinte forma:

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

De 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.)

O sinalizador -E é usado para evitar o escape de colchetes com barras. Sem o sinalizador -E, você precisa escapar dos colchetes com uma barra invertida, como grep -vE '\[youtube\]\|\[ffmpeg\]\|\[avconv\]' Editar:

Como você solicitou awk , aqui está um com 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}'

    
por Sergiy Kolodyazhnyy 14.06.2015 / 15:38
1

Usando o Perl:

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

Para analisar a saída de youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E diretamente, canalize sua saída para o comando sem redirecionar o conteúdo de 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 : redireciona o conteúdo de inputfile para perl ' stdin
  • > outputfile : redireciona o conteúdo de perl stdout para outputfile
  • -p : coloca um loop while (<>) { [...] } ao redor do script e imprime cada linha processada
  • -e : lê o script dos argumentos

Análise do script Perl:

  • s : afirma para executar uma substituição
  • / : inicia o padrão
  • ^ : corresponde ao início da linha
  • \[ : corresponde a um caractere [
  • ( : inicia o agrupamento das strings permitidas
  • youtube : corresponde a uma youtube string
  • | : separa a segunda string permitida
  • ffmpeg : corresponde a uma ffmpeg string
  • | : separa a terceira string permitida
  • avconv : corresponde a uma avconv string
  • ) : para de agrupar as strings permitidas
  • \] : corresponde a um caractere ]
  • .* : corresponde a qualquer número de qualquer caractere
  • $ : corresponde ao final da linha
  • / : interrompe o padrão / inicia a sequência de substituição
  • / : interrompe a string de substituição
por kos 14.06.2015 / 16:18
1

Use grep -v da seguinte forma:

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]'
    
por Abdennour TOUMI 18.05.2016 / 14:11