Remove a variável final do arquivo de texto

0

Como posso usar um script para me livrar da última -xyz.mp4 em uma lista de arquivos texto .

Neste momento, tenho uma longa lista de text que preciso de alterar de

55363642b-b13218-4cb0-8334-546565346-384.mp4
gfdggwg-e1321-4qwe-9ewq-de32155139d8-360.mp4

Para

55363642b-b13218-4cb0-8334-546565346
gfdggwg-e1321-4qwe-9ewq-de32155139d8
    
por masterq 26.07.2018 / 20:20

3 respostas

2
$ sed 's/-[^-]*\.mp4$//' file
55363642b-b13218-4cb0-8334-546565346
gfdggwg-e1321-4qwe-9ewq-de32155139d8

A expressão sed s/-[^-]*\.mp4$// é uma substituição que corresponde a um traço seguido por qualquer número de não traços, um ponto e a string mp4 (no final da linha). O texto correspondente é removido.

Para fazer a alteração no local, use o sinal -i de sed (mas execute sem primeiro para garantir que o resultado esteja correto):

sed -i 's/-[^-]*\.mp4$//' file

Se esses fossem nomes de arquivos, eu faria um loop sobre os arquivos reais:

for mp4file in *.mp4; do
    printf 'The truncated name is "%s"\n' "${mp4file%-*.mp4}"
done

A substituição do parâmetro ${mp4file%-*.mp4} seria expandida para o nome do arquivo com a string mais curta correspondente a -*.mp4 removida do final.

    
por 26.07.2018 / 20:29
1

sed solution. Procura por um hífen, seguido por 3 caracteres, seguido por .mp4, seguido por fim de linha ($) e substitui por nada.

Leia "arquivo", escreva nomes menores para o arquivo "newfile".

sed 's/-...\.mp4$//g' file >newfile

ou edite o "arquivo" no lugar

sed -i 's/-...\.mp4$//g' file
    
por 26.07.2018 / 20:29
0

Usando awk :

awk -F- -vOFS=- 'NF{NF-=1};1' file

Isso delimitará cada linha com - , removerá o último campo e, em seguida, imprimirá os campos restantes com a nova adição do traço.

    
por 26.07.2018 / 20:45