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

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

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

Quero renomear esse arquivo usando a palavra extraída.

O comando que uso para extrair a palavra, que usarei mais tarde para renomearnome do arquivo.txt, é o seguinte:

$ grep -e "some words" -e "other words" filename.txt | awk '{print $1}' 

nome do arquivo.txtexemplo de conteúdo:

dasdadas
asdasda
asdas
matched some words
asdas
asda

Resultado esperado:nome do arquivo.txtserá renomeado paracorrespondente.txt.

Espero que isso possa ser feito usando o comando de uma linha.

Isso não funcionará, 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 thegrep`. Obrigado.

Responder1

#!/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"

Responder2

Usar grepe awkem um único pipeline raramente é uma boa ideia, já que awktudo greppode ser feito:

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

informação relacionada