
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 the
grep`. 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 grep
e awk
em um único pipeline raramente é uma boa ideia, já que awk
tudo grep
pode ser feito:
awk '/(some|other) words/ {print $1}' filename.txt | xargs -I{} mv filename.txt {}.txt