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