1
resposta

Erro ao substituir linhas de um texto com sed em um loop

Olá, pessoal... Eu tenho um arquivo .srt de uma legenda e minha intenção é a cada 6 linhas substituir a numeração q vem antes de cada horário do video para a numeração adequada que seria de 1-663 e com isso é somado linha+1, só que eu estou tendo o erro de token inesperado 'then' na linha 3

#!/bin/bash
for line in seq 6
then
    sed -i 's/[1-663]/[$line+1]/' '/home/andrew/Series/Mr Robot/Mr..Robot.S03E01.AMZN.WEB-DL.Portuguese.Brazil.POR.srt'
done

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Andre!

O erro que você está enfrentando ocorre porque a sintaxe do for está incorreta. No Bash, o for deve ser usado com a sintaxe correta para iterar sobre uma sequência de números. Além disso, a substituição no sed não está correta para o que você deseja fazer. Vamos corrigir isso.

Aqui está uma versão corrigida do seu script:

#!/bin/bash

# Inicializa o contador
contador=1

# Lê o arquivo linha por linha
while IFS= read -r line; do
    # Se a linha for um número, substitui pelo contador
    if [[ $line =~ ^[0-9]+$ ]]; then
        echo $contador
        contador=$((contador + 1))
    else
        echo "$line"
    fi
done < '/home/andrew/Series/Mr Robot/Mr..Robot.S03E01.AMZN.WEB-DL.Portuguese.Brazil.POR.srt' > '/home/andrew/Series/Mr Robot/Mr..Robot.S03E01.AMZN.WEB-DL.Portuguese.Brazil.POR_modified.srt'

Explicações:

  1. Loop while: Lê cada linha do arquivo.
  2. Regex para números: Verifica se a linha atual é um número.
  3. Substituição: Se for um número, substitui pelo valor do contador e incrementa.
  4. Redirecionamento: Salva a saída em um novo arquivo para não sobrescrever o original.

Espero ter ajudado e bons estudos!