one-liner para renomear um arquivo usando a saída de outro comando

0

Eu tenho um comando que extrai uma palavra de um arquivo.

Eu quero renomear esse arquivo usando a palavra extraída.

O comando que eu uso para extrair a palavra, que eu usarei mais tarde para renomear filename.txt , é o seguinte:

$ grep -e "some words" -e "other words" filename.txt | awk '{print $1}' 
Exemplo de conteúdo

filename.txt :

dasdadas
asdasda
asdas
matched some words
asdas
asda

Resultado esperado: nome_do_arquivo.txt será renomeado para matched.txt .

Espero que isso possa ser feito usando o comando one-liner.

Isso não funciona, mas talvez algo como:

mv filename.txt $(grep -e "some words" -e "other words" filename.txt | awk '{print $1}').txt Note: Im certain that there will only be one match with the grep '. Obrigado.

    
por unixnoob99 17.12.2016 / 04:38

2 respostas

1

#!/bin/bash 
old_file_name=$1  # take an argument for the file you want to muck with
new_file_name=$(grep -e "some words" -e "other words" "${old_file_name}" | awk '{print $1}' | head -n 1).txt 
mv "$old_file_name" "$new_file_name"
    
por 17.12.2016 / 04:56
0

Usar grep e awk em um único pipeline raramente é uma boa ideia, pois awk pode fazer tudo grep pode:

awk '/(some|other) words/ {print $1}' filename.txt | xargs -I{} mv filename.txt {}.txt
    
por 19.12.2016 / 12:18

Tags