Renomeia o início do nome do arquivo usando um texto específico no próprio arquivo

3

Eu tenho muitos arquivos no diretório ( file1.txt , file2.txt , ...)

Cada arquivo contém um monte de linhas. Uma das linhas é o texto específico thetext seguido por um número aleatório, como thetext56 , thetext21 , etc.

Eu quero renomear o início do nome do arquivo usando um texto específico no próprio arquivo. Assim, file1.txt será thetextXXfile1.txt , file2.txt será thetextXXfile2.txt e assim por diante.

O comando simples renomear para adicionar addtext no começo é

rename 's?^?addtext?' *.html

enquanto obtém esse texto específico nos arquivos

sed '/thetext/!d' *.html

mas não tenho ideia de como combinar os dois.

    
por Najib-botak Chin 30.07.2011 / 21:05

1 resposta

5

Sugiro que grep seja uma ferramenta melhor para sed quando o que você deseja fazer é ler uma linha de um arquivo com base em uma correspondência. Você está convidado a substituir o seu sed na estrutura de loop abaixo. Note que eu também usei a opção -m 1 para que o grep só se preocupe em procurar o primeiro jogo:

for file in *.html; do
   text="$(grep -m 1 "thetext" "$file")"
   rename "s?$text?" "$file"
done
    
por 30.07.2011 / 21:09